c/c++语言开发共享C语言——<计算>_较大两个数相乘

例题:9876543210*1234567890 的乘积 分析:正常的数据结构已经无法满足这么大的数相乘的结果。只能使用数组来进行操作。 1、两个数都用字符数组来接收。 2、接收后,因为每一位要乘以另一个数的每一位, 数组下标0的位置是数字的最高位,这样每次相乘后都会发生最高为变化。而下标0的位置不 …

例题:9876543210*1234567890 的乘积

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

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

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

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

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

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

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

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

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

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

 1 #include <iostream>  2 using namespace std;  3 int main() {  4     char a[100], b[100], c[100] = {0};  5     int i, j, k, l, a, b, c;  6     //输入第一个数  7     cin >> a;  8     //查看第一个数的长度  9     for (i = 0; a[i] != '';++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] != '';++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] = ''; 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 }

 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/605445.html

(0)
上一篇 2021年5月13日
下一篇 2021年5月13日

精彩推荐