题目描述 Description
加减法是计算中的基础运算,虽然规则简单,但是位数太多了,也难免会出错。现在的问题是:给定任意位数(不超过1000位)的加减法算式,请给出正确结果。为提高速度,保证给定运算的结果均为正整数。
 输入输出格式 Input/output
输入格式:
一行:一个加法或减法的表达式
输出格式:
一个正整数,表示计算的结果(不可以有前导0)
 输入输出样例 Sample input/output
样例测试点#1
输入样例:
12345678+111
输出样例:

123456789

思路:这题的数据量很大,有1000位,如果用int或longlong类型的直接计算是不可取的,必须用高精度算法。
这里可以分为步来算:
①用字符串读入数组
②扫描一遍数组,把操作符前后的两段存入两个数组
③利用高精度加减法计算两数组之和或之差存入a数组或b数组(你想怎么样都行)
④for循环输出(倒序)
补充:高精度算法是指参与运算的数(加数,减数,因子……)范围大大超出了标准数据类型(整型,实型)能表示的范围的运算
代码如下:
 #include<stdio.h>
#include<string.h>
int a[]={},b[]={};
int i,ka,kb,k,c,temp;
char s[],ch;
void plus()//高精度加法函数
{
for(i=;i<k;i++)
{
a[i]=a[i]+b[i]+c;//按位加
if(a[i]>=)//处理进位(满十进一)
{
a[i]=a[i]%;
c=;
}
else c=;
}
if(c>)
{
a[k]=c;
k++;
}
}
void minus()//高精度减法函数
{
for(i=;i<ka;i++)
{
if(a[i]<b[i])//判断这一位计算是否要借位
{
c=;
a[i+]--;
}
else
c=;
a[i]=a[i]+c*-b[i];//计算这一位的结果
k=ka;
while(a[k-]==&&k>)
k--;
}
}
int main()
{
scanf("%s",s);
k=;
while((s[k]!='+')&&(s[k]!='-'))//以运算符为界,分开两个操作数,期前部分计入数组a
{
a[k]=s[k]-'';
k++;
}
ch=s[k];//记录操作符
ka=k;//记录操作符当前位置
kb=;
k++;//跳过继续
while(k<strlen(s))//运算符后部分计入数组b
{
b[kb]=s[k]-'';
k++;
kb++;//记录运算符后部分的位数
}
if(ka>=kb) k=ka;//取a和b的最大长度,以便进行按位计算
else k=kb;
for(i=;i<ka/;i++)//读入是从高位到低位的顺序,计算之前应该反序
{
temp=a[i];
a[i]=a[ka-i-];
a[ka--i]=temp;
}
for(i=;i<kb/;i++)//读入是从高位到低位的顺序,计算之前应该反序
{
temp=b[i];
b[i]=b[ka-i-];
b[ka--i]=temp;
}
c=;//进位初始化
if(ch=='+')//传入加法函数
plus();
else //传入减法函数
minus();
for(i=k-;i>=;i--)//按倒序输出结果
{
printf("%d",a[i]);
}
printf("\n");
return ;
}
 
 

大数据加减(Big data addition and subtraction)的更多相关文章

  1. [Swift]LeetCode592. 分数加减运算 | Fraction Addition and Subtraction

    Given a string representing an expression of fraction addition and subtraction, you need to return t ...

  2. 大整数加减运算的C语言实现

    目录 大整数加减运算的C语言实现 一. 问题提出 二. 代码实现 三. 效果验证 大整数加减运算的C语言实现 标签: 大整数加减 C 一. 问题提出 培训老师给出一个题目:用C语言实现一个大整数计算器 ...

  3. [Aaronyang] 写给自己的WPF4.5 笔记6[三巴掌-大数据加载与WPF4.5 验证体系详解 2/3]

    我要做回自己--Aaronyang的博客(www.ayjs.net) 博客摘要: Virtualizing虚拟化DEMO 和 大数据加载的思路及相关知识 WPF数据提供者的使用ObjectDataPr ...

  4. WPF 大数据加载过程中的等待效果——圆圈转动

    大家肯定遇到过或将要遇到加载大数据的时候,如果出现长时间的空白等待,一般人的概念会是:难道卡死了? 作为一个懂技术的挨踢技术,即使你明知道数据量太大正在加载,但是假如看不到任何动静,自己觉得还是一种很 ...

  5. DevExpress ChartControl大数据加载时有哪些性能优化方法

    DevExpress ChartControl加载大数据量数据时的性能优化方法有哪些? 关于图表优化,可从以下几个方面解决: 1.关闭不需要的可视化的元素(如LineMarkers, Labels等) ...

  6. asp.net中TreeView的大数据加载速度优化

    由于数据量太大,加载树时间很长,所以进行了优化 前台 .aspx <asp:Panel ID="Panel2" runat="server" Height ...

  7. 大数据除法(Large data division)

    题目描述 Description 除法是计算中的基础运算,虽然规则简单,但是位数太多了,也难免会出错.现在的问题是:给定任意位数(足够大就可以啦O(∩_∩)O)的一个被除数,再给定一个long lon ...

  8. javascript数据加减问题

    需要parseInt把获取到的html(),text()的值转换为数字型,然后进行加减乘除操作就可以了:

  9. PayPal高级工程总监:读完这100篇论文 就能成大数据高手(附论文下载)

    100 open source Big Data architecture papers for data professionals. 读完这100篇论文 就能成大数据高手 作者 白宁超 2016年 ...

随机推荐

  1. libvirt里的面向对象的C语言

    C语言:类的声明和定义 // 通用父类的定义 struct _virClass { virClassPtr parent; unsigned int magic; char *name; size_t ...

  2. TODO:字节序的一些理解

    TODO:字节序的一些理解 本文是小编对字节序的片面理解,希望对你有帮助哈. 字节序,即字节在电脑中存放时的序列与输入(输出)时的序列是先到的在前还是后到的在前. 1.Little endian:将低 ...

  3. 斗地主 (NOIP2015 Day1 T3)

    斗地主 张牌,因为它可以连在K后, 总体思路为 先出炸弹和四带二 再出三带一 再把对牌和单牌出完 记录并更新Answer,后枚举顺子,并继续向下搜索. 注意:弄明白题意,题目描述不太清楚....另外, ...

  4. Mysql登录后看不到数据库

    进入数据库后,只能看到information_schema/test这两个库,其他的数据库都看不到,这是权限出了问题. 关闭Mysql /usr/local/mysql/support-files/m ...

  5. Struts2 注解零配置方法(convention插件使用)

    最近接触到一个新的项目,是做一个使用S2SH的电子商务商城的二次开发.之前使用过S2SH,在此之前的项目中,Struts2 使用的是XML配置而这个项目是使用注解.在这个项目中,注解还不需要使用Act ...

  6. 每天学习一点点...css...

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. android设备中USB转串口demo 下载

    http://files.cnblogs.com/guobaPlayer/testUSB2Serial.apk USB转串口demo程序, 无需驱动,只要手机USB是OTG类型,插上我们的模块即可使用 ...

  8. 多线程随笔一(AutoResetEvent和ManulResetEvent)

    AutoResetEvent和ManulResetEvent是.net中用来做线程的同步的两个类.从类名上不难看出,这两个类的区别在于一个是自动的,一个是手动的(这不是废话嘛).两个类的实现原理大致相 ...

  9. CSS绑定

    css绑定会对元素的CSS类进行操作.在某些情况下这将非常有用,例如:当数值是负的时将其高亮显示. (注:如果如果不想直接更改CSS类,而是只要改其中一个样式,则需要使用style绑定) 示例:使用静 ...

  10. 用DriverBackUp备份了文件 装好系统后怎么把备份的驱动文件还原

    1.打开DriverBackUp 2.菜单栏选择Restore 3.选择open backup file 4.找到备份文件位置,并选择.bki后缀的文件 5.点击"打开" 6.勾选 ...