C语言超大数相加
来源:互联网 发布:java swing 输入框 编辑:程序博客网 时间:2024/06/11 21:34
超大数相加
这里超大数表示已经超出int、long、long long 范围的数字,所以不能简单的相加。此时就要用字符串,把输入的内容储存在字符串中,通过字符与数字之间的关系计算结果。
思路:
1.输入xxxx+xxxxxx,已‘+’分割成两个子串。
2.逆序两个子串,末位变成首位对齐,按位相加,大于10则向后位进一。
3.需要考虑到两个数长度不同的情况。
4.再把最后的结果逆序输出,就得到了最终正向相加的结果
代码如下:
#include <stdio.h>#include <string.h>void reverse(char *s,int len);char * addLargeNumber(char *s1,char *s2);int main(int argc, char const *argv[]){char str[100];int len[10];//截取的每个子串的长度scanf("%s",str);char *sep = "+-*/";char *p = strtok(str,sep);char *s = p;char *k = p;len[0] = strlen(p);reverse(p, len[0]);puts(p);while(1){ s = strtok(NULL, sep); if (s == NULL) { break; } len[1] = strlen(s); reverse(s,len[1]); puts(s); k = s;//}printf("access to addLargeNumber\n");p = addLargeNumber(p,k);len[2] = strlen(p);reverse(p,len[2]);puts(p);return 0;}//反转一个字符串void reverse(char *s,int len){char temp; int i; for(i = 0;i<len/2;i++) { temp = s[i]; s[i] = s[len-1-i]; s[len-1-i] = temp; } }//接收两个字符串,把长度小的加到长度大的串上,返回相加后的串char * addLargeNumber(char *s1,char *s2){char *p = s1;char *q = s2;char k;int i;printf("子串1的长度=%lu 子串2的长度=%lu\n", strlen(p),strlen(q));int len = strlen(q);//确保p指向长度较长的串。确保len的值为较小的串的长度。 if (strlen(s1)<strlen(s2)){len = strlen(p);q = s2;p = s1;}int difflen = strlen(p)-strlen(q);//两个子串长度的差值。//printf("len = %d difflen = %d\n",len ,difflen);for (i = 0; i <len; ++i){int a = p[i] + q[i] -96;//printf("a = %d\n", a);if (a>=10){k = a -10+ 48;p[i+1] += 1;}else {k = a + 48;}//printf("k = %c\n", k);p[i] = k;printf("p[%d] = %c\n", i,p[i]);}//解决较长串后一位如果被进位的情况。例如:1379+128(假设两个已逆序的串)或者15999+148for(i = 0;i<difflen;i++){if (p[len+i] == 58){p[len+i] -= 10;if (i == difflen-1){//当i指向最后一个有效数字时,并且当前位是‘:’,则将其后一位赋为结束符p[len+i+1] = 49;//这种是赋值符号,是将'1'赋给p[i]。对比下面的运算符p[len+difflen+1] = 0;}else{p[len+i+1] += 1;//这种是运算符,是将p[i]的ASCII码加1.}printf("p[%d] = %c\n",len+i,p[len+i] );}else{break;}}printf("相加之后的串长度= %lu\n", strlen(p));puts(p);return p;}
0 0
- C语言超大数相加
- C 语言 超大数相加和求余
- 超大数相加减
- 两个超大数相加
- 两个超大数相加
- 超大数相加问题
- 超大数相加
- 两个超大数的相加
- 两个超大数相加算法
- 【C语言】超大数乘法运算
- C语言超大数除法,支持小数
- 两个超大整数相加(c++)
- 两个超大数相乘 和两个超大数相加
- java如何对两个超大数相加
- 两个超大数相加 C++代码
- C语言 矩阵相加,数乘
- <C语言超大数求和>实现思路及源码
- java中两个超大数相加以及BigInteger介绍
- NYOJ 背包问题
- 如此PS真的好吗?
- oracle 性能优化操作十二: 用Case语句合并多重扫描
- Java工具类之Apache的Commons Lang和BeanUtils
- 安装MinGW,搭配Notepad++编译C++
- C语言超大数相加
- Windows内核驱动编程笔记(转载集合)
- oracle 性能优化操作十三: 使用nls_date_format
- 一键GHOST是什么?
- iOS常见编译错误
- 说一说显卡坏了的一些症状
- 用AspNetPager和数据存储过程分页真的很方便
- 音响系统电源和线路故障解决方案
- JBoss6 Datasource 数据源密码 加密解密机制