[造个小*·数串互转函数] stoi和to_string函数实现

有时比赛提供的编译环境不支持c++中的stoi函数和to_string函数,前者是将 字符串转为数字,后者将数字转为字符串.
2者互转的媒介可利用ascii码,数字与字符±‘0’互转.
stoi中利用了pow函数.
to_number中利用了栈的逆序特点.
自己实现了一下,不过可能数的大小(长度)会收long long 限制.
自我安慰一下,暂且就自封造个小*吧2333.

stoi:字符串转数字

ll stoi(string s){
	ll res=0;
	int k=0;
	for(int i=s.size()-1;i!=-1;i--) //终止条件 也可写做 ~i 
		res+=(s[i]-'0')*pow(10,k++); //亲测,此处k++和++k最后k结果一样,都是s的size 
		
	return res;
}

to_number:数字转字符串

string to_string(ll x){
	stack<char> stk;  
	string s;
	char tmp;
	ll a; //每次的个位 
	while(x){
		a=x%10;
		x/=10;
		tmp=a+'0';
		stk.push(tmp);
	}
	while(stk.size()){ //利用栈逆序 
		s+=stk.top();
		stk.pop();
	}
	return s;
}

测试代码

#include<iostream>
#include<algorithm>
#include<string.h>
#include<cstring>
#include<stdio.h>
#include<cmath>
#include<math.h>
#include<stack>
using namespace std;
typedef long long ll;

ll stoi(string s){
	ll res=0;
	int k=0;
	for(int i=s.size()-1;i!=-1;i--) //终止条件 也可写做 ~i 
		res+=(s[i]-'0')*pow(10,k++); //亲测,此处k++和++k最后k结果一样,都是s的size 
		
	return res;
}

string to_string(ll x){
	stack<char> stk;  
	string s;
	char tmp;
	ll a; //每次的个位 
	while(x){
		a=x%10;
		x/=10;
		tmp=a+'0';
		stk.push(tmp);
	}
	while(stk.size()){ //利用栈逆序 
		s+=stk.top();
		stk.pop();
	}
	return s;
}

int main() 
{
	string s="1236611515516993"; // stoi函数 
	cout<<stoi(s)<<endl;
	
	ll a=123494751;
	string ss=to_string(a); // to_string函数 
	cout<<ss+"hahai"+'&'<<endl;
		
	return 0;
}

/*
string to_string(ll x){ //这样也可 [c++中字符串可与单个字符直接拼接(+连接)]
	stack<string> stk;  
	ll k=0; // k统计传进来的数字x的位数 
	string s,tmp;
	ll a; //每次的个位 
	while(x){
		a=x%10;
		x/=10;
		tmp=a+'0';
	//	cout<<tmp<<endl;
		stk.push(tmp);
	}
	while(stk.size()){
		s+=stk.top();
		stk.pop();
	}
	return s;
}
*/

运行结果
[造个小*·数串互转函数] stoi和to_string函数实现

上一篇:[ HNOI2016 ] 最小公倍数


下一篇:hivalric Blossom