天天看點

c語言大數乘法各位相加問題A*BDescriptionInputOutput

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;

}

繼續閱讀