ZOJ-3167
来源:互联网 发布:业余程序员该如何赚钱 编辑:程序博客网 时间:2024/06/01 09:45
这题内存竟然用了16M多。。我知道是大数乘的时候没有free中间变量的原因,但是一加free的代码就一直RE。。至今没找到原因,真是坑啊,待我慢慢摸索吧。。
#include<stdio.h>#include<string.h>#include<stdlib.h>void reverse(char *s){ int len = strlen(s); int i, j; char c; for (i = 0, j = len - 1; i < j; i++, j--) { c = *(s + i); *(s + i) = *(s + j); *(s + j) = c; }}char *appendTailZero(char *s, int zeros){ int i, len = strlen(s); char *r = malloc(len + zeros + 1); for (i = 0; i < len; i++) *(r + i) = *(s + i); for (i = len; i < len + zeros; i++) *(r + i) = '0'; *(r + len + zeros) = '\0'; return r;}char *add(char *s1, char *s2){ int l1 = strlen(s1); int l2 = strlen(s2); int len = l1 > l2 ? l1 : l2; char *r = malloc(len + 2); int i, prev = 0, a, b, sum; for (i = 0; i < len; i++) { a = l1 - 1 - i >= 0 ? *(s1 + l1 - 1 - i) - '0' : 0; b = l2 - 1 - i >= 0 ? *(s2 + l2 - 1 - i) - '0' : 0; sum = a + b + prev; *(r + i) = sum > 9 ? sum - 10 + '0' : sum + '0'; prev = sum > 9 ? 1 : 0; } if (prev) { *(r + len) = '1'; *(r + len + 1) = '\0'; } else *(r + len) = '\0'; reverse(r); return r;}char *multiplyHelper(char *s1, int digit){ int i, res, prev = 0, len = strlen(s1); char *r = malloc(len + 2); if (!digit) { *r = '0'; *(r + 1) = '\0'; return r; } for (i = 0; i < len; i++) { res = (*(s1 + len - 1 - i) - '0') * digit + prev; *(r + i) = res % 10 + '0'; prev = res / 10; } if (prev) { *(r + len) = prev + '0'; *(r + len + 1) = '\0'; } else *(r + len) = '\0'; reverse(r); return r;}char *multiply(char *s1, char *s2){ if (strlen(s1) < strlen(s2)) { char *temp; temp = s1; s1 = s2; s2 = temp; } int l2 = strlen(s2); int i; char *t, *zt; char *sum = malloc(2); sum = "0"; for (i = 0; i < l2; i++) { char *tp = sum; t = multiplyHelper(s1, *(s2 + l2 - 1 - i) - '0'); zt = appendTailZero(t, i); sum = add(tp, zt); free(t); free(zt); } return sum;}int main(){ int k; char m[5]; while (scanf("%d %s", &k, m) != EOF) { char *r = m; int count = 1; while (strlen(r) < k) { r = multiply(r, m); count++; } r = r + strlen(r) - k; while (*r != '7') { r = multiply(r, m); r = r + strlen(r) - k; count++; } printf("%d\n", count); } return 0;}
0 0
- ZOJ-3167
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- poj 3134 Power Calculus(迭代加深dfs)
- 网页爬虫(一)
- 去除浮躁的心,坚持不懈地去积累知识,奋斗未来,FROM201401092324
- HttpUrlConnection 实现模拟POST表单传输
- Android广播BroadcastReceiver
- ZOJ-3167
- Qt+OpenGL学习随笔之一:Qt下载和新建OpenGL工程
- gcc跟g++的区别
- cocos2dx的文章
- 动态规划
- OpenCV进行OCR识别
- 黑马程序员------------------java基础常识
- html,CSS文字大小单位px、em、pt的关系换算
- Windows ICON 详解