加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

C语言大数相乘的问题

发布时间:2020-12-14 03:42:55 所属栏目:大数据 来源:网络整理
导读:给你两个整数,请你计算A × B。 输入 数据的第一行是整数T(1 ≤ T ≤ 20),代表测试数据的组数。 接着有T组数据,每组数据只有一行,包括两个非负整数A和B。 但A和B非常大,Redraiment能保证这些数用long来保存一定会溢出。 但A和B的位数最大不会超过100位
给你两个整数,请你计算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]=''; ? ? ? ? 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 = %sn",b,sum); ? ? ? ? if(n!=0) ? ? ? ? ? ? printf("/n"); ? ? ? ? ? ? for(s=lena+lenb+1;s>=0;s--) ? ? ? ? ? ? sum[s]=0; ? ? ? ?} ? ? return 0; }? 问题还可以扩展成大数相减,相加,阶乘问题。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读