代码问题分析
我的代码:
#include <bits/stdc++.h>
using namespace std;
int main(){
long long int m;
cin >> m;
string str=to_string(m);
int n = sizeof(str)-1;
for(int i=1;i<=n;i++){
string r= str.substr(0, i);
string t= str.substr(i,n);
int l= (int)r+(int)t;
cout<<l
}
return 0;
}
实际上应该这样经过仔细检查,发现了几个问题:
1. 在使用 `sizeof()` 获取字符串长度时,应该使用 `str.size()` 或者 `str.length()`。因为 `sizeof()` 返回的是对象在内存中的大小(字节数),而不是字符串的实际长度。
2. 在计算拆分后的两个部分的和时,不能将两个字符串直接相加。需要使用 `stoi()` 函数将字符串转换为整数,然后再进行相加。
3. 在输出结果时,缺少了分号,导致代码无法通过编译。
综上所述,修正后的代码如下:
#include <iostream>
#include <string>
using namespace std;
int main() {
long long int m;
cin >> m;
string str = to_string(m);
int n = str.size();
for (int i = 1; i < n; i++) {
string r = str.substr(0, i);
string t = str.substr(i, n-i);
int l = stoi(r) + stoi(t);
cout << l << endl;
}
return 0;
}
这样修改后的代码就能够正确地拆分输入的数字,并输出拆分后部分的和了。
还有:
#include <bits/stdc++.h>
using namespace std;
int main() {
long long int m;
int num=0;
cin >> m;
string str = to_string(m);
int n = str.size()-1;
for (int i = 0; i < n; i++) {
int k= str[i]-str[n];
if(k%2==0){
num++;
}
}
cout << num << endl;
return 0;
}
和
#include<bits/stdc++.h>
using namespace std;
int main()
{
string a;
cin>>a;
int ans=0;
for(int i=0;i<a.size()-1;i++)
{
int k=a[i]-a[a.size()-1];
if(k%2==0) ans++;
}
cout<<ans<<endl;
return 0;
}
俩代码执行不同
改后:
#include <bits/stdc++.h>
using namespace std;
int main() {
string m;
int num=0;
cin >> m;
int n = m.size()-1;
for (int i = 0; i < n; i++) {
int k= m[i]-m[n];
if(k%2==0){
num++;
}
}
cout << num << endl;
return 0;
}
本文作者:2c237c6
本文链接:https://www.cnblogs.com/27dCnc/p/18568705
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步