当前位置:编程学习 > C/C++ >>

求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就可以了

上一个:这个C语言程序总是运行不了,求高手帮助
下一个:跪求C语言一题 要详解和流程图 感激不尽!!

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,