2010年华中科技大学计算机研究生机试真题之六

来源:互联网 发布:网络水军合法吗 编辑:程序博客网 时间:2024/04/27 21:43
题目描述:

实现一个加法器,使其能够输出a+b的值。

输入:

输入包括两个数a和b,其中a和b的位数不超过1000位。

输出:

可能有多组测试数据,对于每组数据,
输出a+b的值。

样例输入:
2 610000000000000000000 10000000000000000000000000000000
样例输出:
810000000000010000000000000000000
思路:该题考查的大整数数加法,题目已明确1000位以内,c中int的范围达不到,初步的思路有2个。
   第一是用java语言实现,java中有大整数的封装直接调用;
   第二是申请一个1000位的int数组,每个int数组保存一位。然后用加法对应位相加保存结果。第一中简单,这里我们用第二种方法实现
#include "stdio.h"#include "string.h"const int MAXN = 1000;int main(){    char str1[MAXN]; //保存第一个加数    char str2[MAXN]; //保存第二个加数    int q1[MAXN];    //将第一个加数char型转成int型    int q2[MAXN];    //将第二个加数char型转成int型    int q[MAXN];     //保存结果    memset(str1,0,sizeof(str1));    memset(str2,0,sizeof(str2));        memset(q1,0,sizeof(q1));    memset(q2,0,sizeof(q2));    memset(q,0,sizeof(q));        while(scanf("%s%s",str1,str2)!=EOF)    {    int count1=strlen(str1);    int count2=strlen(str2);        //将第一加数char型转成int保存在Int数组中    for(int i=count1-1;i>=0;i--)   {    q1[count1-1-i]=str1[i]-'0';   }        //将第二加数char型转成int保存在Int数组中    for(int i=count2-1;i>=0;i--)    {    q2[count2-1-i]=str2[i]-'0';   }    int ans=0;    //对应位相加    for(int j=0;j<MAXN;j++)    {    int temp=q1[j]+q2[j]+ans;    ans=temp/10;    q[j]=temp%10;    }    int t;    for(t=MAXN-1;t>=0;t--)    if(q[t]) break;    for(;t>=0;t--)   {    printf("%d",q[t]);   }   printf("\n");    }    return 1;}

0 0
原创粉丝点击