计算m! 注意这里的m可以>10,同样适用下面的规则。
temp 当前index所在值与乘数相乘的结果
digit 当前的最高位数
next 进位
#define MAX_SIZE 100000
int num[MAX_SIZE];
int main(){
int m;
cin>>m;
//temp digit next
num[0] = 1;
int digit = 1;
int next = 0;
int temp;
for(int i = 2; i <= m; i++){
int j;
for(j = 0,next = 0; j < digit; j++){
temp = num[j] * i + next;
num[j] = temp%10;
next = temp / 10;
}
while(next){
digit++;
num[digit-1] = next % 10;
next = next / 10;
}
}
for(int i = digit-1; i >=0; i--){
cout<< num[i];
}
cout<<endl;
return 0;
}
计算m^n
#define MAX_SIZE 100000
int num[MAX_SIZE];
int main(){
int m,n;
cin>>m;
cin>>n;
//temp digit next
int init = m;
int digit = 0;
int index = 0;
while(init){
num[index++] = init%10;
init = init/10;
digit++;
}
int next;
int temp;
for(int i = 2; i <= n; i++){
int j;
for(j = 0,next = 0; j < digit; j++){
temp = num[j] * m + next;
num[j] = temp%10;
next = temp / 10;
}
while(next){
digit++;
num[digit-1] = next % 10;
next = next / 10;
}
}
for(int i = digit-1; i >=0; i--){
cout<< num[i];
}
cout<<endl;
return 0;
}
大数相加
void add(string n1, string n2, string &res){// 计算结果用参数的方式传入;尽量用string 和*char 不要用char[]
reverse(n1);
reverse(n2);
string::size_type len1 = n1.size();
string::size_type len2 = n2.size();
char ans[len1+len2];
int next = 0;
int i = 0;
for(; i < len1 && i < len2; i++){
int temp = (n1[i] - '0') + (n2[i] - '0') + next;
next = temp / 10;
ans[i] = temp % 10+ '0';
}
while(i < len1){
int temp = n1[i] - '0' + next;
next = temp / 10;
ans[i] = temp % 10 + '0';
i++;
}
while(i < len2){
int temp = n2[i] - '0' + next;
next = temp / 10;
ans[i] = temp % 10 + '0';
i++;
}
while(next){
res[i] = next % 10 + '0';
next = next / 10;
i++;
}
while(--i >=0 ){
res += ans[i];
}
}
int main(){
string n1;
string n2;
cin >> n1 >> n2;
string result="";
add(n1, n2, result);
cout<< result <<endl;
return 0;
}