标签:
【0】
大数加法和大数乘法都需要诸位运算?
大数减法呢,是变成负数诸位运算,还是模仿补码,哪个更容易?
大数除法,则是模拟N个大数减法。
大数取余,则是诸位取余。
大数乘法,累加过程中,涉及到大数加法和大数取余,
大数除法,递减过程中,涉及到大数减法和大数乘法。
大数阶乘呢?
【1】
http://acm.hdu.edu.cn/showproblem.php?pid=1002
待修改
//HDU 1002
#include<stdio.h>
#include<string.h>
int main() {
int i,j=0,n,m,len1,len2,flag;
char st1[1001],st2[1001],s3[1003]= {0},s1[1001]= {0},s2[1001]= {0};
scanf("%d",&n);
while(j<=n-1) {
flag=0;
//预处理
memset(s1,0,sizeof(s1));
memset(s2,0,sizeof(s2));
memset(s3,0,sizeof(s3));
scanf("%s",st1);
scanf("%s",st2);
printf("Case %d:\n",j+1);
printf("%s + %s = ",st1,st2);
len1=strlen(st1);
len2=strlen(st2);
if(len1==1&&len2==1&&st1[0]==48&&st2[0]==48) {
printf("0");//特殊情况避免下文死循环
} else {
//逆序,保证诸位相加时,是从个位开始的
for(i=0; i<=len1-1; i++) {
s1[len1-i-1]=st1[i]-48;
}
for(i=0; i<=len2-1; i++) {
s2[len2-i-1]=st2[i]-48;
}
//诸位相加直到两个数高位都是零
for(i=0; i<len1||i<len2; i++) {
s3[i]=s1[i]+s2[i];
}
for(i=0; i<=1003; i++) {//似乎也可以统计位数改进
s3[i+1]+=(s3[i]/10);//进位
s3[i]%=10;//保留结果
//每一位都涉及到除法和取余是否太浪费
}
for(i=0; i<=1003; i++) {//从最开始的地方打印 ,而非个位或者最高位
if(flag||s3[1003-i]) {//直到遇到非零数,拨动开关,不再受零的限制
printf("%d",s3[1003-i]);
flag=1;
}
}
}
printf("\n");
j++;
if(j<=n-1)
printf("\n");
}
return 0;
}
【5】
int remaind ( char * dividend,int divider) {
int length=0,remainder=0,i;
while( dividend[length]!=0) {
length++;
}
for(i=0; i<=length-1; i++) {
remainder=( (dividend[i]-48)+remainder*10)% divider;
}
return remainder;
}
标签:
原文地址:http://www.cnblogs.com/lhy1024/p/5205812.html