70,020
社区成员




#include<stdio.h>
#include<stdlib.h>
int *devideNumber(long long int );//这个函数负责将数各位分解,无特别
static int cnt=0;
int main(){
long long int x,b[20];//将所给数作为long long int型存储
int i,NotMatch=0,mark;
scanf("%d",&x);
int *a=devideNumber(x);//将分解后的数字放进malloc的空间内,无特别
while(cnt){
b[cnt-1]=*a++;//将分解后的数字倒着装入数组b中(因为分解是倒着分的)
cnt--;
}
x=2*x;
a=devideNumber(x);//将翻倍后的x再次分解,无特别
while(1){
for(i=0,mark=0;i<cnt;i++){
if(*a==b[i]||*a==0){
NotMatch++;//将两次分解结果匹配,匹配数NotMatch与位数cnt相同则YES
b[i]=-1;//每匹配成功一位就置空以应对相同的情况(如1234567899)
mark=1;//mark是输出控制,没什么特别的
a++;
break;
}
}
if(NotMatch==cnt&&mark==1){
printf("YES\n");
while(cnt--)
printf("%d",*(a---1));
break;
}else if(mark==0){
printf("NO");
break;
}
}
}
int *devideNumber(long long int x){
int i;
int* a=(int *)malloc(20*sizeof(int));
for(i=0;x>0;i++){
a[i]=x%10;
x=x/10;
cnt++;
}
return a;
}
#include <stdio.h>
#include <string.h>
#define MAXLEN 1000
char a1[MAXLEN];
char a2[MAXLEN];
static int v1[MAXLEN];
static int v2[MAXLEN];
static int v3[MAXLEN];
int i,j,n,L,z;
void main(void) {
scanf("%d",&n);
for (j=0;j<n;j++) {
scanf("%s%s",a1,a2);
L=strlen(a1);
for (i=0;i<L;i++) v1[i]=a1[L-1-i]-'0';
L=strlen(a2);
for (i=0;i<L;i++) v2[i]=a2[L-1-i]-'0';
for (i=0;i<MAXLEN;i++) v3[i]=v1[i]+v2[i];
for (i=0;i<MAXLEN;i++) {
if (v3[i]>=10) {
v3[i+1]+=v3[i]/10;
v3[i]=v3[i]%10;
}
}
printf("Case %d:\n", j+1);
printf("%s + %s = ", a1, a2);
z=0;
for (i=MAXLEN-1;i>=0;i--) {
if (z==0) {
if (v3[i]!=0) {
printf("%d",v3[i]);
z=1;
}
} else {
printf("%d",v3[i]);
}
}
if (z==0) printf("0");
printf("\n");
}
}
//Sample Input
//3
//0 0
//1 2
//112233445566778899 998877665544332211
//
//Sample Output
//Case 1:
//0 + 0 = 0
//Case 2:
//1 + 2 = 3
//Case 3:
//112233445566778899 + 998877665544332211 = 1111111111111111110
#include<stdio.h>
#include<stdlib.h>
int *DevideNumber(long long int );
void OutPut(int,int,int *,int);//输出结果函数,参数:Correct:Yes/NO
static int cnt=0; //Plus_Minus:正/负
//int*:分解结果的地址
int main(){ //cnt:位数
long long int x,b[20];
int i,NotMatch=0,Mark,Plus_Minus,Correct;
scanf("%lld",&x);
if(x>0){
Plus_Minus=1;
}else if(x==0){
Corret=1;
Plus_Minus=0;
}else if(x<0){
x=-x;
Plus_Minus=-1;
}
int *a=DevideNumber(x);
while(cnt){
b[cnt-1]=*a++;
cnt--;
}
x=2*x;
int* save=a=DevideNumber(x);
while(1){
for(i=0,Mark=0;i<cnt;i++){
if(*a==b[i]){
b[i]=-1;
Mark=1;
NotMatch++;
a++;
break;
}
}
if(NotMatch==cnt&&Mark==1||x==0){
Correct=1;
printf("Yes\n");
OutPut(Correct,Plus_Minus,a,cnt);
break;
}else if(Mark==0){
Correct=0;
printf("No\n");
OutPut(Correct,Plus_Minus,save,cnt);
break;
}
}
return 0;
}
int *DevideNumber(long long int x){
int i;
int* a=(int *)malloc(20*sizeof(int));
for(i=0;x!=0;i++){
a[i]=x%10;
x=x/10;
cnt++;
}
return a;
}
void OutPut(int Correct,int Plus_Minus,int *p,int cnt){
if(Plus_Minus==-1)
printf("-");
else if(Plus_Minus==0)
printf("0");
if(Correct==1){
while(cnt--)
printf("%d",*(p---1));
}else if(Correct==0){
while(cnt--)
printf("%d",*(p+cnt));
}
}
scanf("%lld",&x);