微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C语言大数相乘的问题

给你两个整数,请你计算A × B。 输入 数据的第一行是整数T(1 ≤ T ≤ 20),代表测试数据的组数。 接着有T组数据,每组数据只有一行,包括两个非负整数A和B。 但A和B非常大,Redraiment能保证这些数用long来保存一定会溢出。 但A和B的位数最大不会超过100位。 输出 对应每组测试数据,你都要输出两行: 第一行为:"Case #:",# 代表这是第几组测试数据。 第二行是一个等式:"A * B = Sum",Sum 代表 A × B 的结果。 你要注意这个等式里包含了几个空格。 要求每组数据之间都需要保留一个空行。 样例输入 2 1 2 123456789 987654321 样例输出 Case 1: 1 * 2 = 2 Case 2: 123456789 * 987654321 = 121932631112635269  很显然对于100位的数据我们无法定义他的类型,因此只能用数组一位一位计算,然后输出结果,但应注意要把字符转换成数字,同样运算时千万要注意0的运算 #include<stdio.h> #include<string.h> #define MAX 10005 int main() {     int n,i,j,t,s;     char a[102],b[102],temp[105]={0},sum[MAX]={0};     int lena,lenb,flag;     scanf("%d",&n);     while(n--)     {      flag=0;      scanf("%s%s",a,b);      lena=strlen(a);      lenb=strlen(b);      for(j=lenb-1;j>=0;j--)         {           for(t=lena,i=lena-1;i>=0;i--,t--)             {               temp[t]=(a[i]-0x30)*(b[j]-0x30);              }             for(t=lena;t>=1;t--)             {                 if(temp[t]>9)                 {                  temp[t-1]+=temp[t]/10;                  temp[t]%=10;                 }             }             for(s=lena+lenb-flag,t=lena;t>=0;t--,s--)                 sum[s]+=temp[t];             for(t=lena;t>=0;t--)                 temp[t]=0;             for(s=lena+lenb;s>=1;s--)             {                 if(sum[s]>9)                 {                  sum[s-1]+=sum[s]/10;                  sum[s]%=10;                 }             }             flag++;         }         sum[lena+lenb+1]='\0';         for(s=0;s<=lena+lenb;s++)                 sum[s]=sum[s]+0x30;         for(s=0;s<lena+lenb;s++)             if(sum[0]==0x30)             {                 for(t=0;t<=lena+lenb-s;t++)                 sum[t]=sum[t+1];              }              else break;         printf("Case %d:\n",m);         printf("%s * %s = %s\n",b,sum);         if(n!=0)             printf("/n");             for(s=lena+lenb+1;s>=0;s--)             sum[s]=0;        }     return 0; }  问题还可以扩展成大数相减,相加,阶乘问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐