设为首页 加入收藏

TOP

C语言——<计算>_较大两个数相乘
2019-01-22 22:08:34 】 浏览:148
Tags:语言 < 计算 > 较大 两个数 相乘

例题:9876543210*1234567890 的乘积

分析:正常的数据结构已经无法满足这么大的数相乘的结果。只能使用数组来进行操作。

    1、两个数都用字符数组来接收。

    2、接收后,因为每一位要乘以另一个数的每一位,

      数组下标0的位置是数字的最高位,这样每次相乘后都会发生最高为变化。而下标0的位置不易变化。

      需要将最低位的值转移到下标为0这个位置,将最高位的数组下标改成最大下标。

      所以,需要将原来的两个数,进行取反。

    3、两个数相乘,在每一位相乘的过程中,有可能大于10的乘积,需要进位。所以要判断相乘后的积是否大于10,大于10需要进位。

      每一次进位,相乘,都需要跟原来下标位置的值,进行相加,才能获得最终的值

    4、在输出前,需要对这个数进行位数确定。从后到前查看碰到字符为0的就赋值为‘\0’,字符串以0结尾。

    5、因为乘积是反向的,所以输出的时候需要再次取反。将这个数反向打印出来即可。

 1 #include <iostream>
 2 using namespace std;  3 int main() {  4     char a[100], b[100], c[
		    
 
			
"color: #800080">100
] = {0}; 5 int i, j, k, l, A, B, C; 6 //输入第一个数 7 cin >> a; 8 //查看第一个数的长度 9 for (i = 0; a[i] != '\0';++i) { } 10 A = i; 11 //将第一个数,位置取反 12 for (i = 0; i <= (A - 1) / 2;++i) { 13 k = a[i]; 14 a[i] = a[A - i - 1]; 15 a[A - i - 1] = k; 16 } 17 //输入第二个数 18 cin >> b; 19 //查看第二个数的长度 20 for (i = 0; b[i] != '\0';++i) {} 21 B = i; 22 //将第二个数,位置取反 23 for (i = 0; i <= (B - 1) / 2;++i) { 24 k = b[i]; 25 b[i] = b[B - i - 1]; 26 b[B - i - 1] = k; 27 } 28 //两数相乘 29 for (i = 0; i <= A - 1;++i) { 30 for (j = 0; j <= B - 1;++j) { 31 C=(a[i]-48) * (b[j]-48); 32 k = i + j; 33 c[k] = c[k] + C; 34 C = c[k]; 35 for (l = 0; c[k + l] >= 10;++l) { 36 c[k+l] = c[k + l] % 10; 37 c[k + l + 1] = C / 10 + c[k + l+1]; 38 C = c[k+l+1]; 39 } 40 } 41 } 42 43 //输出相乘后的数 44 for (i = 19; c[i] == 0;i--) { 45 if (c[i]==0) { 46 c[i] = '\0'; 47 } 48 } 49 j = i + 1; 50 for (i = 0; i < (j - 1)/2;++i) { 51 k = c[i]; 52 c[i] = c[j-i - 1]; 53 c[j - i - 1] = k; 54 } 55 for (i = 0; i < j;++i) { 56 printf("%d",c[i]); 57 } 58 }

 


编程开发网
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇二维数组(初学者) 下一篇c语言static关键字的理解

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

array(4) { ["type"]=> int(8) ["message"]=> string(24) "Undefined variable: jobs" ["file"]=> string(32) "/mnt/wp/cppentry/do/bencandy.php" ["line"]=> int(217) }