字符串类型的数字的加减乘除运算
除法
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;
}
字符串类型的数字的加减乘除运算相关推荐
- JavaScript 特有奇葩问题“字符串类型与数字类型混乱”的分析与解决,与类型转换
字符串类型与数字类型的混乱,应该是JS最著名的奇葩问题了. 恰好最近遇到这个问题,在这里对这个问题的解决方法及产生原因进行总结与分析. Java 语言与 JavaScript 语言是什么关系.这是初学 ...
- C++字符串类型和数字之间的转换
C++字符串类型和数字之间的转换 转载:http://www.cnblogs.com/luxiaoxun/archive/2012/08/03/2621803.html 1.字符串数字之间的转换 字符 ...
- 字符串类型的数字比较大小
var a = '1'; // 编码10进制 49var b = '2' // 编码10进制 50console.log( a < b) // true var a = '123'; // 编码 ...
- 单片机加减法计算器_51单片机简易计算器程序 实现数字的加减乘除运算
单片机源程序如下: #include //头文件 #define uint unsigned int #define uchar unsigned char sbit lcden=P1^1; //LC ...
- 字符串类型转数字类型的几种方法
1. Number() var str1="11",str2="hello",num1 = Number( str1 ),num2 = Number( str2 ...
- 将DataFrame的数字部分由字符串类型转换为数字类型
今天我准备用Excel进行画图的时候,我发现我Excel中的数据无法正常画出,例如: 这是为什么啊,因为这些数据储存的时候,被存为了字符串类型,而不是数字类型,我们可以通过python函数进行数据类型 ...
- mysql 将字符串转换数字类型的_MySQL 字符串类型用数字可以查出来 MySQL字符串类型会转换成数字 MySQL隐式类型转换...
一.发现问题 1.在一次MySQL查询中,某字段为 varchar 字符串类型,传入参数值为 int 数字类型,发现查询的结果和预期的不一致. 如: 某两列 name='11' , name = '1 ...
- mysql字符串类型的数字比较大小sql该如何写呢
今天上线一个需求,线上产品验收发现一个bug,lot号范围是1-99,而实际数值应该是1-449才对 原来的sql SELECT min( ITEM_LOT ) AS minLot, ...
- 字符串类型的数字比较大小_Python核心知识系列:数字与字符串类型
学习任何一种编程语言时首先要对它的数据类型有所了解,从本篇开始会对 Python 中的常见数据类型的基本概念和操作进行介绍. Python中有6种标准的数据类型:数字(Number).字符串(Str ...
最新文章
- Spring MVC POJO传参方式
- 网易视频云专注于技术服务——异步通知系统
- python内存管理变量_Python变量内存管理
- CDATA C#操作XML(无命名空间),添加/删除/编辑节点
- 赛门铁克备份软件服务起不来_软件安全开发服务资质和信息系统灾难备份与恢复服务资质...
- python内置函数大全,赶紧收藏!!
- Android EditText 赋值与取值
- [算法]华为笔试题——字母和十进制数映射
- 生成树协议计算机网络,【图片】生成树协议奇怪!我错哪了两边都绿了呀【计算机网络吧】_百度贴吧...
- (FPGA学习)环境及入门-------基于黑金FPGA cyclone IV EP4CE15F17开发板
- 执行maven install 报如下错是什么原因呢?
- soap xml 转 json
- 无线路由器怎么改密码
- ipad 顶部时间电池栏 浏览器无法隐藏
- Webpack经典入门
- 计算机基础知识与公文写作,公文写作与计算机基础知识
- Oracle Study之--Oracle 11g RAC添加节点错误
- 设置用户ID位是什么意思
- GOM引擎登录器配置教程
- 识别三角形(c++基础)