精度计算-大数乘小数
发布时间:2020-12-14 02:35:05 所属栏目:大数据 来源:网络整理
导读:精度计算-大数乘小数 ? ?? 本算法是用来计算一个大数(现有的数据类型无法表示的数)乘以一个小数(10以内的数)。 算法思路是把大数的每一位都当做一个字符放入一个字符数组中,再从最后一位开始于要乘的小数相乘并加上前一位的进位,如果有进位存入一个变
精度计算-大数乘小数
? ??
本算法是用来计算一个大数(现有的数据类型无法表示的数)乘以一个小数(10以内的数)。
算法思路是把大数的每一位都当做一个字符放入一个字符数组中,再从最后一位开始于要乘的小数相乘并加上前一位的进位,如果有进位存入一个变量中,加到下一位的计算中去。
下面是我的C语言实现过程。
int main() { char c[100] = "1231231231231231231231231231231232"; char t[101] ; int m = 10; mult(c,t,m); printf("%s",t); return 0; } void mult(char c[],char t[],int m) { int i,l,k,flag,add=0; char s[100]; l=strlen(c); /*这个是把原大数数组传人真正进行运算的数组, 因为从低位开始运算所以要见原数组进行逆置, 因为是字符,所以运算的数要减轻字符‘0’的 ASCII码值然后再进行运算。 */ for (i=0;i<l;i++) s[l-i-1]=c[i]-'0'; //这个循环是用来从最小的一位开始于m相乘 for (i=0;i<l;i++) { k=s[i]*m+add; if (k>=10) { s[i]=k%10; add=k/10; flag=1; } else { s[i]=k; flag=0; add=0; } } //flag是用来记录最高位做乘法时有进位的情况 if (flag) { l=i+1; s[i]=add; } else l=i; //这个循环是用来把s数组的内容存到结果数组中 for(i=0;i<l;i++) t[l-1-i]=s[i]+'0'; t[l]=' '; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |