大整数相加2
来源:互联网 发布:美国最新非农数据分析 编辑:程序博客网 时间:2024/05/17 02:51
#include <stdio.h>#include <string.h> #include <stdlib.h> #define READ_SIZE 1000void AddLongInteger(char * pcAddend, char * pcAugend, char * pcAddResult){ int len1 = 0; int len2 = 0; int lenSmall = 0; int lenBig = 0; int big = 0; int add = 0; int aug = 0; int result = 0; int carry = 0; int i = 0; char * pcResult = pcAddResult ; len1 = strlen(pcAddend); len2 = strlen(pcAugend); if(len1>len2) { lenSmall=len2; lenBig = len1; big = 1; } else { lenSmall=len1; lenBig = len2; big = 2; } memset(pcResult, '0', lenBig+1); pcResult[lenBig+1] = 0; for(i=0; i< lenSmall; i++) { add = pcAddend[len1 -1 -i] - '0'; aug = pcAugend[len2 -1 -i] - '0'; result = add + aug; if(result >9) { carry =1; result = result - 10; } else { carry = 0; result = result; } pcResult[lenBig-i] += result ; pcResult[lenBig - 1 - i] += carry; } for(i=lenSmall; i< lenBig; i++) { if(big == 1) { result = pcAddend[len1-1-i] - '0'; } else { result = pcAugend[len2-1-i] - '0'; } carry = 0; result = result; pcResult[lenBig-i] += result ; pcResult[lenBig - 1 -i] += carry; } if(pcResult[0] == '0') { memmove(pcAddResult, pcResult+1, lenBig+1); }}int main(int argc ,char *argv[]) { char *pcAddResult = 0; char * p1 ; char * p2 ; char buf[READ_SIZE]; int i = 0; int j = 0; int il = 0; int zero = 0; char *p[2]; char * temp = 0; int temp_len = 0; int times = 0; char * linep = 0; int linel = 0; struct { char * p; int l; } lineBuf; lineBuf.p = 0; lineBuf.l = 0; //read a very long line while(1) { fgets(buf, READ_SIZE, stdin); il = strlen(buf); if(buf[il-1] == '\n') { if(times == 0) { lineBuf.l = il + 1; lineBuf.p = malloc(lineBuf.l); strncpy(lineBuf.p, buf, il+1); } else { temp = lineBuf.p; temp_len = lineBuf.l; lineBuf.l = temp_len + il + 1; lineBuf.p= malloc(lineBuf.l); strncpy(lineBuf.p, temp, temp_len); strncpy(lineBuf.p + temp_len, buf, il+1); free(temp); temp = 0; } //printf("a:times:%d, p:%s,l:%d\n", times, lineBuf.p, lineBuf.l); break; } else { times ++; //il = READ_SIZE - 1 // if buf is xxxx\0, il = 4 if(times == 1) { lineBuf.l= il * times; lineBuf.p = malloc(lineBuf.l); strncpy(lineBuf.p , buf, il ); } else { temp = lineBuf.p; temp_len = lineBuf.l; lineBuf.l = il * times; lineBuf.p = malloc(lineBuf.l); strncpy(lineBuf.p, temp, temp_len); strncpy(lineBuf.p + temp_len, buf, il); free(temp); temp = 0; } //printf("b:times:%d, p:%s,l:%d\n", times, lineBuf.p, lineBuf.l); } } if(lineBuf.l < 3) { //printf("lineBUf.l<3:%d\n", lineBuf.l); return 0; } //printf("p:%s, l:%d\n", lineBuf.p, lineBuf.l); linep = lineBuf.p; linel = lineBuf.l - 1; for(i=0; i<linel; i++) { if(linep[i] >= '0' && linep[i] <= '9') {} else { linep[i] = 0; } } if(linep[0] == '0' && linep[1] != 0) { linep[0] = 0; } for(i=0; i<linel -1;i++) { if(linep[i] == 0) { if(linep[i+1] == '0' && linep[i+2] != 0) { linep[i+1] = 0; } } } j = 0; zero = 1; for(i=0; i<linel; i++) { if(linep[i] == 0) { zero = 1; } else { if(zero == 1) { p[j++] = linep+i; zero = 0; if(j >=2 ) break; } } } if(j < 1) { //printf("j<1:%d\n", j); return 0; } //printf("p0:%s, p1:%s\n", p[0], p[1]); pcAddResult = malloc(lineBuf.l); memset(pcAddResult, 0, lineBuf.l); AddLongInteger(p[0], p[1], pcAddResult); printf("%s\n", pcAddResult); free(pcAddResult); free(lineBuf.p); return 0; }
0 0
- 大整数相加2
- 大整数相加算法
- 大整数相加
- 大整数相加问题
- 大整数相加
- 大整数相加
- 大整数相加
- 大整数相加
- 大整数相加
- 两个大整数相加
- 大整数相加
- 大整数相加
- 大整数相加
- js 大整数相加
- 大整数相加,相乘
- 大整数相加
- 大整数相加
- C 大整数相加
- UVA 10791 - Minimum Sum LCM
- Leetcode NO.186 Reverse Words in a String II
- Ehcache 整合Spring 使用页面、对象缓存
- 1-11-4 银行系统
- 嵌入式系统 Boot Loader 技术内幕
- 大整数相加2
- C++中的单例模式
- poj 1959 Darts 允许重复组合
- const 详解
- SDL Event Handling 事件处理
- 冒泡排序
- 何新生—你是哪国人?
- 3.5 ICMP不可达报文的处理
- 什么是angular js指令