Times17--高精度

来源:互联网 发布:黑客用函数语言编程 编辑:程序博客网 时间:2024/05/17 04:50
题意:二进制的高精度与低精度乘法


分析:通过17的二进制表示,我们发现,只有两位1,所以可以用类似大整数加法的方法来处理。第几位有1,就相当于把输入的二进制右移几位。存储的时候,记得倒过来存。


Code:

#include <cstdio>#include <cstring>using namespace std;const int maxn = 1005;char s[maxn];int a[maxn], b[maxn];int ans[maxn];int main() {while(scanf("%s", s) != EOF) {memset(a, 0, sizeof(a));memset(b, 0, sizeof(b));int len = strlen(s);for(int i = 0; i < len; i++)a[i] = s[len-i-1]-'0';for(int i = 4; i < len+4; i++)b[i] = s[len+4-i-1]-'0';int carry = 0;for(int i = 0; i < len+4; i++) {int tmp = a[i]+b[i]+carry;ans[i] = tmp%2;carry = tmp/2;}int cnt = len+4;if(carry != 0) ans[cnt++] = 1;for(int i = cnt-1; i >= 0; i--)printf("%d", ans[i]);printf("\n");memset(s, 0, sizeof(s));}return 0;}


0 0
原创粉丝点击