除法

string Divide(string str,int x){int remainder=0;for(int i=0;i<str.size();i++){int current=str[i]-'0'+remainder*10;str[i]=current/x+'0';remainder=current%x;}int pos=0;while(str[pos]=='0') pos++;return str.substr(pos);
}

乘法

string Multiple(string str,int x){int carry=0;for(int i=str.size()-1;i>=0;i--){int current=(str[i]-'0')*x+carry;str[i]=current%10+'0';carry=current/10;}if(carry!=0) str=to_string(carry)+str;return str;
}

加法

string Add(string str,int x){int carry=x;for(int i=str.size()-1;i>=0;i--){int current=str[i]-'0'+carry;str[i]=current%10+'0';carry=current/10;}if(carry!=0) str='1'+str;return str;
}

减法

string Sub(string str,int x){int carry=x;for(int i=str.size()-1;i>=0;i--){int current=str[i]-'0'-carry;if(current<0){if(10+str[i]-'0'-carry%10==10){temp=0;str[i]='0';}else{str[i]=10+str[i]-'0'-carry%10+'0';temp=1; }carry=-1*current/10+temp;}else{str[i]=current+'0';carry=0;}}return str;
}

综合例子

对于一个十进制数A,将A转换为二进制数,然后按位逆序排列,再转换为十进制数B,我们称B为A的二进制逆序数。 例如对于十进制数173,它的二进制形式为10101101,逆序排列得到10110101,其十进制数为181,181即为173的二进制逆序数。

#include<bits/stdc++.h>
using namespace std;string Divide(string str,int x){int remainder=0;for(int i=0;i<str.size();i++){int current=str[i]-'0'+remainder*10;str[i]=current/x+'0';remainder=current%x;}int pos=0;while(str[pos]=='0') pos++;return str.substr(pos);
}string Multiple(string str,int x){int carry=0;for(int i=str.size()-1;i>=0;i--){int current=(str[i]-'0')*x+carry;str[i]=current%10+'0';carry=current/10;}if(carry!=0) str='1'+str;return str;
}string Add(string str,int x){int carry=x;for(int i=str.size()-1;i>=0;i--){int current=str[i]-'0'+carry;str[i]=current%10+'0';carry=current/10;}if(carry!=0) str='1'+str;return str;
}int main(){string str;cin>>str;vector<int> v;while(str.size()!=0){int last=str[str.size()-1]-'0';v.push_back(last%2);str=Divide(str,2);}string ans="0";for(int i=0;i<v.size();i++){ans=Multiple(ans,2);ans=Add(ans,v[i]);}cout<<ans;return 0;
}

补充

在做数字的阶乘时很容易结果超出表示范围,此时多使用大数运算

  • 大数加法
string addString(string a,string b)
{int carry=0;string res;int i=a.size()-1;int j=b.size()-1;while(i>=0 && j>=0){int num=carry+a[i]-'0'+b[j]-'0';res+=num%10+'0';carry=num/10;i--;j--;   }while(i>=0){int num=carry+a[i]-'0';res+=num%10+'0';carry=num/10;i--;}while(j>=0){int num=carry+b[j]-'0';res+=num%10+'0';carry=num/10;j--;}   if(carry>0)res+=to_string(carry);reverse(res.begin(),res.end());return res;
}
  • 大数乘法(x<=10)
string mulString(string a,int x)
{int carry=0;string res;for(int i=a.size()-1;i>=0;i--){int num=carry+(a[i]-'0')*x;res+=num%10+'0';carry=num/10;}if(carry>0)res+=to_string(carry);reverse(res.begin(),res.end());return res;
}
  • 组合大数乘法
string MulString(string a,string b)
{string res;for(int i=0;i<b.size();i++){int x=b[b.size()-1-i]-'0';string num=mulString(a,x);for(int j=0;j<i;j++)num=mulString(num,10);res=addString(res,num);}return res;
}

浮点数加法

#include<bits/stdc++.h>
using namespace std;
int c;
string Add2(string a,string b){string res="";int carry=0;for(int i=a.size()-1,j=b.size()-1;i>=0,j>=0;i--,j--){int num=(a[i]-'0')+(b[i]-'0')+carry;res=to_string(num%10)+res;carry=num/10;}c=carry;return res;
}
string Add1(string a,string b){int carry=c;string res;int i=a.size()-1;int j=b.size()-1;while(i>=0 && j>=0){int num=carry+a[i]-'0'+b[j]-'0';res=to_string(num%10)+res;carry=num/10;i--;j--;   }while(i>=0){int num=carry+a[i]-'0';res=to_string(num%10)+res;carry=num/10;i--;}while(j>=0){int num=carry+b[j]-'0';res=to_string(num%10)+res;carry=num/10;j--;} if(carry>0)  res=to_string(carry)+res;return res;
}
string Func(string x,string y){int lenx=x.size();int leny=y.size();int posx=x.find(".");int posy=y.find(".");string x1=x.substr(0,posx);string y1=y.substr(0,posy);string x2=x.substr(posx+1,lenx-1-posx);string y2=y.substr(posy+1,leny-1-posy);int diff=x2.size()-y2.size();if(diff>0)while(diff--)y2+="0";else if(diff<0)while(diff++)x2+="0";c=0;string ans2=Add2(x2,y2);string ans1=Add1(x1,y1);return ans1+"."+ans2;
}
int main(){string x,y;while(cin>>x>>y){string ans=Func(x,y);cout<<ans<<endl;}return 0;
}

字符串类型的数字的加减乘除运算相关推荐

  1. JavaScript 特有奇葩问题“字符串类型与数字类型混乱”的分析与解决,与类型转换

    字符串类型与数字类型的混乱,应该是JS最著名的奇葩问题了. 恰好最近遇到这个问题,在这里对这个问题的解决方法及产生原因进行总结与分析. Java 语言与 JavaScript 语言是什么关系.这是初学 ...

  2. C++字符串类型和数字之间的转换

    C++字符串类型和数字之间的转换 转载:http://www.cnblogs.com/luxiaoxun/archive/2012/08/03/2621803.html 1.字符串数字之间的转换 字符 ...

  3. 字符串类型的数字比较大小

    var a = '1'; // 编码10进制 49var b = '2' // 编码10进制 50console.log( a < b) // true var a = '123'; // 编码 ...

  4. 单片机加减法计算器_51单片机简易计算器程序 实现数字的加减乘除运算

    单片机源程序如下: #include //头文件 #define uint unsigned int #define uchar unsigned char sbit lcden=P1^1; //LC ...

  5. 字符串类型转数字类型的几种方法

    1. Number() var str1="11",str2="hello",num1 = Number( str1 ),num2 = Number( str2 ...

  6. 将DataFrame的数字部分由字符串类型转换为数字类型

    今天我准备用Excel进行画图的时候,我发现我Excel中的数据无法正常画出,例如: 这是为什么啊,因为这些数据储存的时候,被存为了字符串类型,而不是数字类型,我们可以通过python函数进行数据类型 ...

  7. mysql 将字符串转换数字类型的_MySQL 字符串类型用数字可以查出来 MySQL字符串类型会转换成数字 MySQL隐式类型转换...

    一.发现问题 1.在一次MySQL查询中,某字段为 varchar 字符串类型,传入参数值为 int 数字类型,发现查询的结果和预期的不一致. 如: 某两列 name='11' , name = '1 ...

  8. mysql字符串类型的数字比较大小sql该如何写呢

    今天上线一个需求,线上产品验收发现一个bug,lot号范围是1-99,而实际数值应该是1-449才对 原来的sql SELECT     min( ITEM_LOT ) AS minLot,      ...

  9. 字符串类型的数字比较大小_Python核心知识系列:数字与字符串类型

    ​学习任何一种编程语言时首先要对它的数据类型有所了解,从本篇开始会对 Python 中的常见数据类型的基本概念和操作进行介绍. Python中有6种标准的数据类型:数字(Number).字符串(Str ...

最新文章

  1. Spring MVC POJO传参方式
  2. 网易视频云专注于技术服务——异步通知系统
  3. python内存管理变量_Python变量内存管理
  4. CDATA C#操作XML(无命名空间),添加/删除/编辑节点
  5. 赛门铁克备份软件服务起不来_软件安全开发服务资质和信息系统灾难备份与恢复服务资质...
  6. python内置函数大全,赶紧收藏!!
  7. Android EditText 赋值与取值
  8. [算法]华为笔试题——字母和十进制数映射
  9. 生成树协议计算机网络,【图片】生成树协议奇怪!我错哪了两边都绿了呀【计算机网络吧】_百度贴吧...
  10. (FPGA学习)环境及入门-------基于黑金FPGA cyclone IV EP4CE15F17开发板
  11. 执行maven install 报如下错是什么原因呢?
  12. soap xml 转 json
  13. 无线路由器怎么改密码
  14. ipad 顶部时间电池栏 浏览器无法隐藏
  15. Webpack经典入门
  16. 计算机基础知识与公文写作,公文写作与计算机基础知识
  17. Oracle Study之--Oracle 11g RAC添加节点错误
  18. 设置用户ID位是什么意思
  19. GOM引擎登录器配置教程
  20. 识别三角形(c++基础)

热门文章

  1. 云服务器怎么换ip云服务器,云服务器换ip难不难?云服务器换IP的步骤
  2. 【报告分享】 2020年汽车产销数据及汽车工业运行情况-中国汽车工业协会(附下载)
  3. Layui layer弹层组件 子iframe大小比父iframe大,还可对父iframe进行操作
  4. 全景制作平台,krpano全景图下载并快速关联漫游
  5. css加透明边框,CSS3实现透明边框的方法分享
  6. redis存10万条数据_redis如何存储数据
  7. 【多数据中心】分布式数据同步设计方案
  8. (大白话版)子网划分、进制换算
  9. 免费简单好用的屏幕录制工具——Captura
  10. 路由器怎么安装和使用详细