开始是试用书上的方法写一下,大数的乘法:把数以字符串的形式输入,在换为数组存储,在按位依次处理。
那些俩个相乘的测试数据都还过了。
#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] 举报,一经查实,本站将立刻删除。