杨美人


私信TA

用户名:8520

访问量:42781

签 名:

轻易地做到别人无能为力的事情,这就是才能。

等  级
排  名 155
经  验 7206
参赛次数 0
文章发表 69
年  龄 19
在职情况 学生
学  校 太原理工大学
专  业

  自我简介:

解题思路:

 详见代码,不懂可以留言偶






注意事项:

每次循环完成后都要清空数组。






参考代码:

//大数求和,所以必须用字符串解决计算 
#include <stdio.h>
#include <string.h> 
int main()
{
 char a[1000],b[1000];                                    //保存两个大数 
 int i,t1,t2,a1[1000]={0},b1[1000]={0},a2,b2;          // 注意将两个数组初始化全为0 
 while(scanf("%s%s",a,b)!=EOF)
 {
  a2=strlen(a);          //计算两个数组的长度 
  b2=strlen(b);
  if(a2>b2) t1=a2;         //保存最长的数组 
  else t1=b2;
  t2=t1;
  for(i=0;i<a2;i++,t1--)        // 因为求加法,所以在数组中储存的数必须倒着想加,也方便进位 
   a1[t1]=a[a2-1-i]-'0';       //用AS码值将字符数字转化为数字储存在数组中 
  for(t1=t2,i=0;i<b2;i++,t1--)
   b1[t1]=b[b2-1-i]-'0';
  for(i=t2;i>=0;i--)         //因为有可能加的时候溢出来所以又多了一位 
  {
   a1[i]+=b1[i];         //两数相加 注意逢十进一 
   if(a1[i]>=10)          
   {
    a1[i]-=10;
    a1[i-1]++;
   }
  }
  if(a1[0]!=0)          //考虑到第一个数可能为零  
   for(i=0;i<=t2;i++)
    printf("%d",a1[i]);
  else
   for(i=1;i<=t2;i++)
    printf("%d",a1[i]);
  printf("\n");
  memset(a1,0,sizeof(a1));       //调用该函数时需要引用头文件string.h,
  memset(b1,0,sizeof(b1));       //清空数组memset(a,0,sizeof(a));
 }
 return 0;
}


 

0.0分

0 人评分

  评论区

不错,虽然我还没研究,但看完你的代码,认为还是很容易明白的
2019-05-06 21:10:18
  • «
  • 1
  • »