给出两个正整数A和B,计算A*B的值。保证A和B的位数不超过500位。
2017-12-21 17:57
148 查看
#include <stdio.h> #include <string.h> #define M 500 void zero(char *a); int main(void) { char a[M],b[M],result[M*M]; scanf("%s %s",a,b); int count=0,begin=0; int ta=0,tb=0,tc=0; int tmp=0; int lena=0,lenb=0; int dlena=0,dlenb=0; int sum=0; zero(result); lena = strlen(a); lenb = strlen(b); dlena = lena-1; dlenb = lenb-1; do { ta = dlena>=0?a[dlena--]-'0':0; tb = b[dlenb]-'0'; tc = tc + ta * tb; tmp = tc % 10; tc = tc>9?tc/10:0; sum = result[begin]-'0'+tmp; if(sum>9) { tc += sum/10; sum = sum%10; } result[begin++] = sum+'0'; if(dlena<0&&tc==0) { dlena = lena-1; dlenb--; count = begin>count?begin:count; begin = lenb-dlenb-1; } }while(dlenb>=0); for(;count>0;) { putchar(result[--count]); } return 0; } void zero(char *a) { int i=0; for(i=0;i<M*M;i++) { a[i] = '0'; } }
相关文章推荐
- 给出两个正整数A和B,计算A+B的值。保证A和B的位数不超过500位
- 汇编语言三 设数组ARRAY存储多个8位无符号数据,其中第一个字用于存放数据个数,试编写程序求数组元素之和,将结果存放在AX中,若计算的和超过16位数表示的范围,则给出溢出标志DX=-1,否则D
- 给出两个点的座标可计算出两点间直线距离
- 读入两个小于100的正整数A和B,计算A+B.A和B的每一位数字由对应的英文单词给出.
- 有两个浮点数a,b,计算a/b,要求保留小数点后面n 位(我写出小数点只能保存9~15位有效位数)
- 读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10100。 输出格式:在一行内输出n的各位数字之和
- 读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10100。 源程序
- C语言实现计算正整数的有效位数
- 上机题目(初级)-计算两个正整数的最大公约数和最小公倍数(Java)
- 作业题,编写两个类:A和B,A创建的对象可以计算两个正整数的最大公约数,B创建的对象可以计算两个数的最小公倍数,要求:B类中有一个成员变量是A类声明的对象
- 7.7.1用穷举法计算两个正整数的最大公约数
- 用单循环链表存储一个环上的数据,并计算任意两个相邻元素之差是否超过2
- 给出一个小于5位正整数,判断是几位数
- 给定两个正整数A和B,把A变成B需要几位?也就是说A和B之间的位数有多少个是不同的?
- C语言计算两个正整数的最大公约数与最大公倍数
- C语言计算两个正整数的最大公约数与最大公倍数
- java正则表达式_正整数或小数且小数位数不超过n位
- 给定两个正整数A和B,把A变成B需要几位?也就是说A和B之间的位数有多少个是不同的?
- 7.4.采用穷举法,用函数编程实现计算两个正整数的最小公倍数的函数,在主函数中调用该函数计算并输出从键盘任意输入的两个数的最小公倍数。
- 给定两个正整数,计算这两个数的最小公倍数。