c语言大数乘法各位相加问题

A*B

Time Limit: 3000ms, Memory Limit: 10000KB , Accepted: 2982, Total Submissions: 3890

Description

设计一个程序求出A*B,然后将其结果每一位相加得到C,如果C的位数大于等于2,继续将C的各位数相加,直到结果是个一位数k。例如:
6*8=48
4+8=12
1+2=3
输出3即可。

Input

输入给出两个非负整数m,n(0≤m,n≤1000000000000)。

Output

输出k。

  • Sample Input 
    1234567 67
  • Sample Output

    4

#include<stdio.h>
#include<string.h>
void cal(int n);
int main()
{
char a[100],b[100];
int x[100],y[100],c[100],i,j,z,d,k,sum,m,n;
scanf(“%s”,&a);
scanf(“%s”,&b);
m=strlen(a);
n=strlen(b);
j=0;
for(i=m-1;i>=0;i–)//由于不知道数字的位数及大小,因此用字符串来存储数字,再将其转换成整形数据
{
x[j]=a[i]-48;
j++;

j=0;
for(i=n-1;i>=0;i–)
{
y[j]=b[i]-48;
j++;
}
for(i=0;i<=m+n;i++)//数组初始化
{
c[i]=0;
}
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)//两个数字每一位依次相乘
{
z=x[i]*y[j];
if(z>=10)//考虑进位
{
d=z%10;
k=z/10;
            c[i+j]+=d;
        [i+j+1]+=k;
}
else c[i+j]+=z;
}
    }
    for(i=0;i<m+n;i++)
    {
    if(c[i]>=10)
    {
    d=c[i]%10;
    k=c[i]/10;
    c[i]=d;
            c[i+1]+=k;
    }
   
    }
     sum=0;
     for(i=0;i<=m+n;i++)
     {
      sum+=c[i];
     }
     cal(sum);
     return 0;
}
void cal(int n)
{
int d,k,sum; //计算出各位数字相加之和直到该数小于10
L: sum=0;
     while(n)
{
d=n%10;
n=n/10;
sum=sum+d;
}




    原文作者:大整数乘法问题
    原文地址: https://blog.csdn.net/geshengtong/article/details/78449538
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞