求C语言输出999999999999+1234567890123的结果。。。注意长度
求C语言输出999999999999+1234567890123的结果。。。注意长度
求C语言输出999999999999+1234567890123的结果。。。注意长度
答案:#include<stdio.h>
#include<string.h>
#define MAX 1000+2
char a[MAX],b[MAX];
int x[MAX],y[MAX],sum[MAX];
int max(int a,int b){return a>b?a:b;}
int main()
{
int t,la,lb,i,j,maxn,n=0;
scanf("%d",&t);
while(t--)
{
scanf("%s%s",a,b);
memset(sum,0,sizeof(sum));
la=strlen(a);
lb=strlen(b);
for(i=la-1;i>=0;i--)
{
sum[la-1-i]+=a[i]-'0';
}
for(i=lb-1;i>=0;i--)
{
sum[lb-1-i]+=b[i]-'0';
}
maxn=max(la,lb);
for(i=0;i<=maxn;i++)
{
if(sum[i]>=10)
{
sum[i]-=10;
sum[i+1]++;
}
}
for(j=MAX;;j--)
{
if(sum[j])
{
break;
}
}
printf("Case %d:\n%s + %s = ",++n,a,b);
for(i=j;i>=0;--i)
{
printf("%d",sum[i]);
}
printf("\n");
if(t)
{
printf("\n");
}
}
return 0;
}你好,程序如下:
/*能用这个计算万位左右的加法*/
#include<stdio.h>
#include<string.h>
int main()
{
int n,m,i,j,k,h,l,t,t1,t2,t3,t4,s,c,d;
char x[30000],a[15000],b[15000];
scanf("%d",&c);
getchar();
for(d=1;d<=c;d++)
{
gets(x); //输入一行,两个大数
printf("Case %d:\n",d);
//将两数分开并反序存入a,b数组
for(i=1;x[i]!=' ';i++);
for(j=i+1;x[j]!='\0';j++);
n=i;
m=j-i-1;
for(k=1;k<=n;k++)
{
i--;
a[k]=x[i];
}
t1=t3=0;
if(a[k-1]=='-')
{
a[k-1]='\0';
t3=1;
t1=k-2; //判断数的正负,记录数的大小
}
else
{
a[k]='\0';
t1=k-1;
}
if(t3==1)
printf("-");
for(h=t1;h>=1;h--)
printf("%c",a[h]);
printf(" + ");
for(l=1;l<=m;l++)
{
j--;
b[l]=x[j];
}
t2=t4=0;
if(b[l-1]=='-')
{
b[l-1]='\0';
t4=1;
t2=l-2; //判断数的正负,记录数的大小
}
else
{
b[l]='\0';
t2=l-1;
}
if(t4==1)
printf("-");
for(h=t2;h>=1;h--)
printf("%c",b[h]);
printf(" = ");
//如果是都正数or都负数的情况
if(t3==t4)
{
for(t=0,i=1;a[i]!='\0'&&b[i]!='\0';i++)
{
h=a[i]+b[i]+t-48;
t=0;
if(h>'9')
{
x[i]=h-10;
t=1;
}
else
x[i]=h;
}
k=i-1;
for(j=i;a[j]!='\0';j++)
{
h=a[j]+t;
t=0;
if(h>'9')
{
x[j]=h-10;
t=1;
}
else
x[j]=h;
}
if(a[i]!='\0')
k=j-1;
for(j=i;b[j]!='\0';j++)
{
h=b[j]+t;
t=0;
if(h>'9')
{
x[j]=h-10;
t=1;
}
else
x[j]=h;
}
if(b[i]!='\0')
k=j-1;
if(t==1)
{
k++;
x[k]='1';
}
if(t4==1&&t3==1)
{
k++;
x[k]='-';
}
}
//判断两数绝对值的大小
if(t1==t2)
s=0;
for(i=t1;i>=1;i--)
{
if(a[i]>b[i])
{
s=1;
break;
}
if(a[i]<b[i])
{
s=2;
break;
}
}
//如果是一正一负的情况
if(t3!=t4)
{
if(t1>t2||s==1)
{
for(t=0,i=1;b[i]!='\0';i++)
{
h=a[i]-b[i]-t+48;
t=0;
if(h<'0')
{
x[i]=h+10;
t=1;
}
else
x[i]=h;
}
k=i-1;
for(j=i;a[j]!='\0';j++)
{
h=a[j]-t;
t=0;
if(h<'0')
{
x[j]=h+10;
t=1;
}
else
x[j]=h;
}
if(a[i]!='\0')
k=j-1;
if(t3==1)
printf("-");
}
if(t1<t2||s==2)
{
for(t=0,i=1;a[i]!='\0';i++)
{
h=b[i]-a[i]-t+48;
t=0;
if(h<'0')
{
x[i]=h+10;
t=1;
}
else
x[i]=h;
}
k=i-1;
for(j=i;b[j]!='\0';j++)
{
h=b[j]-t;
t=0;
if(h<'0')
{
x[j]=h+10;
t=1;
}
else
x[j]=h;
}
if(b[i]!='\0')
k=j-1;
if(t4==1)
printf("-");
}
for(;x[k]=='0';k--);
if(t1==t2&&s==0)
{
k=1;
x[1]='0';
}
}
//输出结果
for(i=k;i>=1;i--)
printf("%c",x[i]);
printf("\n");
if(c!=d)
printf("\n");
}
}
结果如图:
有疑问提出。
#include <iostream>
void main()
{
long long a,b,c;
a = 999999999999;
b = 1234567890123;
c = a+b;
std::cout << c << std::endl;
}
结果:2234567890122
声明为long long就可以了