i从2一直循环到16
设三个数为opt1,opt2和res
把opt1从i进制变成10进制(提取各位,按权展开)存储到temp1
把opt2从i进制变成10进制(提取各位,按权展开)存储到temp2
把res从i进制变成10进制(提取各位,按权展开),存储到temp3
看temp1*temp2是否等于temp3,如果相等,输出i结束循环。
//大数相加和相乘#include <stdio.h>
#include <string.h>
#define N 1000 //定义大数运算的位数
//打印显示大数
void printit(int *a,int n){
int i=0
while(a[i]==0) i++
for(i<ni++) printf("%d",a[i])
printf("\n")
}
//把字符串的数赋值给大数
void stoarr(char *s,int *a,int n){
int i,m
for(i=0i<ni++) a[i]=0
m=strlen(s)
for(i=0i<mi++)
a[n-m+i]=s[i]-'0'
}
//大数相加c=a+b
void addarr(int *a,int *b,int *c,int n){
int i,m=0
for(i=0i<ni++) c[i]=a[i]+b[i]
//整理c
for(i=n-1i>=0i--){
c[i]+=m
m=c[i]/10
c[i]%=10
}
}
//大数相乘c=a*b
void mularr(int *a,int *b,int *c,int n){
int i,j,m
for(i=0i<ni++) c[i]=0
for(i=n-1i>=0i--)
for(j=n-1j>=0j--){
m=i+j-n+1
if (m>=0) c[m]+=a[i]*a[j]
}
//整理c
m=0
for(i=n-1i>=0i--){
c[i]+=m
m=c[i]/10
c[i]%=10
}
}
int main(){
int a[N],b[N],c[N] //定义3个大数
char s[N]
printf("输入第一个大数\n")
gets(s)
stoarr(s,a,N) //把字符串的内容传给第一个大数a
printf("输入第二个大数\n")
gets(s)
stoarr(s,b,N) //把字符串的内容传给第二个大数b
//计算c=a+b
addarr(a,b,c,N)
printf("两数之和是:\n")
printit(c,N)
//计算c=a*b
mularr(a,b,c,N)
printf("两数之积是:\n")
printit(c,N)
}