CCF认证里有一题需要用到字符串转数字,于是我定义了一个string
类型的变量,然后当做Char
型数组用。
但是在转换到整型数字时,发现了一点点问题。
先看代码
#include <bits/stdc++.h>
using namespace std;
int main(){
string s;
cin>>s;
int sum=0,j=1;
//注意这个循环里
for(int i=0; i<(int)s.length()-1; i++){
sum += (s[i] - '0') * j++; //这里为什么不是sum += s[i] * j++,而是需要先减去'0'。否则结果偏大
}
cout<<sum<<endl;
return 0;
}
在这里字符(串)转int整型时需要先减去'0'
,而且int整型转字符(串)时同样也需要在后面加上一个'0'
,如下
char c;
c = 10 % 3;
c = c + '0'; //注释这一段之后输出的为 ASCII表中 1 所代表的特殊符号
cout<<c<<endl; //此时输出结果为 1
看完这张表我就突然发现问题了
当把字符转直接转换成十进制数字时,比如把字符'1'
转换成1
,此时字符'1'
所对应的十进制数字其实是十进制当中的49
,因此直接把字符当整型计算的话 得到的结果自然会偏大了。
评论 (0)