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

大数相乘

开始是试用书上的方法写一下,大数的乘法:把数以字符串的形式输入,在换为数组存储,在按位依次处理。

  那些俩个相乘的测试数据都还过了。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 200
int a[N]={0},b[N]={0},c[2*N]={0};
char s1[N],s2[N],i,j,len;
int n,m;

void getdigits(int *a,char *s)
{
     len = strlen(s);
     for(i = 0; i < len; ++i){
           a[len-1-i]= *(s+i)- '0';
     }
}

void multiply(int *a,int *b,int *c)
{

     for(i = 0; i < n; i++)
           for(j = 0; j < m; j++){
              c[i+j] +=a[i] * b[i];
           }

     for(i = 0; i < n+m; i++)
     {
           c[i+1] += c[i]/10;
           c[i] = c[i]%10;

     }
}

int main()
{
    scanf("%s%s",s1,s2);

    getdigits(a,s1);
    n=i;
    getdigits(b,s2);
    m=i;
    multiply(a,b,c);
    j=m+n;
    while( c[j] ==0 ) {
        j--;
    }
    //printf("%d ",j);
    for(i =j;i >= 0; i--)
           printf("%d",c[i]);
    printf("\n");
    return 0;
}
开始在输出位数那里纠结了好久。最后证明开始想多了。

写完以后感觉用于那些简单的乘法还行,复杂点的就过不了,最后还是用了java

作了杭电1042:http://acm.hdu.edu.cn/showproblem.php?pid=1042

AC代码

import java.math.BigInteger;
import java.util.Scanner;


public class Main {
 public static void main(String[] args) {
  
  int n;
  Scanner cin =new Scanner(system.in);
  while(cin.hasNext())
  {
   BigInteger ans=BigInteger.valueOf(1);
   n=cin.nextInt();
   for(int i=n;i>=2;i--)
   {
    ans=ans.multiply(BigInteger.valueOf(i));
   }
   System.out.println(ans);
  }
 }

}

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

相关推荐