C言語の文字配列は2つの大きな数値の乗算を実現します

ここに画像の説明を挿入
長さmと数値nは乗算され、積の長さはm + n未満でなければなりません。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    char x[50],y[50],r[100];
    int sum,add,t,m,n,i,j;
    while(scanf("%s",x)>0)
    {
       scanf("%s",y);
       for(i=0;i<100;i++)//初始化使得r字符串中均为‘0’,不是初始化为空
       {
          r[i]='0';
       }
        m=strlen(x);
        n=strlen(y);
        for(i=m-1;i>=0;--i)
        {
            add=0;
            for(j=n-1;j>=0;--j)
            {
                t=(x[i]-'0')*(y[j]-'0');//注意t是int类型,不能字符直接相乘
                sum=r[i+j+1]+add+t%10-'0';
                r[i+j+1]='0'+sum%10;
                add=t/10+sum/10;

            }
            r[i]+=add;
        }

        for(i=0;r[i]=='0';i++);//把前面是0的消去,注意分号
        while(i<=m+n-1)
        {
            printf("%c",r[i]);
            i++;
        }
        printf("\n");

    }
    return 0;
}


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
  char x[50],y[50];
  int i,j,m,n,add,k;
  int *ans;//结果是int类型
   while(scanf("%s",x)>0)
    {
       scanf("%s",y);
      m=strlen(x);
      n=strlen(y);
      k=m+n;
     ans=(int*)malloc(sizeof(int)*(k));
      memset(ans,0,sizeof(int)*k);
      for(i=m-1;i>=0;i--)
      {
          for(j=n-1;j>=0;j--)
          {
              ans[(m-1-i)+(n-1-j)]+=(x[i]-'0')*(y[j]-'0');
          }
      }
      for(i=0;i<m+n-1;i++)
      {
          add=ans[i]/10;
          ans[i]=ans[i]%10;
          ans[i+1]+=add;
      }
      for(i=m+n-1;ans[i]==0;i--);
      while(i>=0)
      {
          printf("%d",ans[i]);
          i--;
      }
      printf("\n");
  }

    return EXIT_SUCCESS;
}

元の記事を公開9件 ・いい ね0件 訪問数224

おすすめ

転載: blog.csdn.net/zmsjylyf/article/details/105023758
おすすめ