求a*b
先定义3个数组,在求出接受数字的那两个数组的长度,根据数学知识知道,i位数和j位数的乘积位数在[i+j-1,i+j]这个区间内。
因为要用第三个数组来接受乘积,所以将第三个数组都设置为零,运用memset函数。(作用是将某一块内存中的内容全部设置为指定的值, 这个函数通常为新申请的内存做初始化工作)
然后开始进行遍历,运用两次for循环。c[i + j + 1]代表进位值,c[i + j]代表个位上的数(表述不出来……)上代码
#include <stdio.h> #include<string.h> int main() { char a[1000],b[1000]; int c[2000]; while(scanf("%s%s",a,b)!= EOF) { int al,bl,ai,bi; al = strlen(a); bl = strlen(b); memset(c, 0, sizeof(c)); for(int i = 0; i < al; i++){ ai = a[al - i -1] - '0'; for(int j = 0; j < bl; j++) { bi = b[bl - j - 1] - '0'; c[i + j] += ai * bi; c[i + j + 1] += c[i + j] / 10; c[i + j] = c[i + j] % 10; } } int k = al + bl; while(c[k] == 0) k--; if(k < 0) puts("0");//这是当0作为乘数时的情况,直接输出零 else{ while(k >= 0) printf("%d", c[k--]); puts(""); } } return 0; }