鱼C论坛

 找回密码
 立即注册
查看: 348|回复: 5

[已解决]求助,修改代码

[复制链接]
发表于 2023-11-27 19:42:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int main()
  4. {
  5.     string a,b;
  6.     cin>>a>>b;
  7.     int l=a.length();
  8.     int r=b.length();
  9.     int i=0,j=0;
  10.     while(a[i]=='0')
  11.     {
  12.         i++;   
  13.     }
  14.     while(b[j]=='0')
  15.     {
  16.         j++;
  17.     }
  18.     if(l-i<r-j)cout<<"<"<<endl;
  19.     if(l-i>r-j)cout<<">"<<endl;
  20.     else if(l-i==r-j)
  21.     {
  22.         int flag=1;
  23.         for(int k=0;k<l-i;k++)
  24.         {
  25.             if(a[k+i]!=b[k+i])
  26.             {
  27.                 if(a[k+i]<b[k+i])
  28.                 {
  29.                     cout<<"<"<<endl;
  30.                 }
  31.                 else
  32.                 {
  33.                     cout<<">"<<endl;
  34.                 }
  35.                 return 0;
  36.             }
  37.             else
  38.             {
  39.                 flag=0;
  40.                
  41.             }
  42.         }
  43.         if (!flag)cout<<"="<<endl;
  44.         
  45.         return 0;
  46.     }

  47. }
复制代码

为什么输入12345跟00012345不是输出“=”呢,应该怎么修改代码
最佳答案
2023-11-27 20:39:43
本帖最后由 柿子饼同学 于 2023-11-27 20:41 编辑

你代码的问题如下 :
        第 27 行的 b[k + i] 应改成 b[k + j]
        10 - 17行最好加一个判断防止越界
        22 行的 flag 不需要 , 因为后面判断出大小之后是直接 return 0 的 , 之后就没了 , 所以判断完如果全相等就直接输出相等


下面是我修改的代码 :
  1. #include <bits/stdc++.h>
  2. using namespace std;

  3. string a, b;
  4. int l, r, i, j;

  5. int main(){
  6.     ios::sync_with_stdio(0);
  7.     cin.tie(0);
  8.    
  9.     cin >> a >> b;
  10.     l = a.size();
  11.     r = b.size();

  12.     while(i < l && a[i] == '0') i++;
  13.     while(j < r && b[j] == '0') j++;

  14.     if(l - i < r - j) cout << "<\n";
  15.     else if(l - i > r - j) cout << ">\n";
  16.     else{
  17.         for(int k = 0; k < l - i; k++){
  18.             if(a[k + i] != b[k + j]){
  19.                 if(a[k + i] < b[k + i]) cout << "<\n";
  20.                 else cout << ">\n";
  21.                 return 0;
  22.             }
  23.         }
  24.         cout << "=\n";
  25.     }
  26.    
  27.     return 0;
  28. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-27 19:42:26 | 显示全部楼层
你的代码中有几个问题。首先,while循环的条件应该是判断a[ i]是否为'0',而不是判断整个字符串a是否等于'0'。同样地,第二个while循环的条件应该是判断b[j]是否为'0'。

另外,你在每个while循环中都没有更新i和j的值,所以如果进入循环,会变成一个无限循环。你需要在循环体中增加i++和j++语句。

最后,如果a和b中都没有前导0,即i和j都等于0,那么直接输出l-r即可。

以下是修改后的代码:

#include <iostream>
using namespace std;
int main()
{
    string a, b;
    cin >> a >> b;
    int l = a.length();
    int r = b.length();
    int i = 0, j = 0;
    while (a[i] == '0')
    {
        i++;
    }
    while (b[j] == '0')
    {
        j++;
    }
    if (i == 0 && j == 0)
    {
        cout << l - r << endl;
    }
    else
    {
        cout << l - r + i - j << endl;
    }
    return 0;
}

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-27 20:09:53 | 显示全部楼层
FishC_GPT 发表于 2023-11-27 19:42
你的代码中有几个问题。首先,while循环的条件应该是判断a是否为'0',而不是判断整个字符串a是否等于'0'。 ...

无语了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-27 20:10:08 | 显示全部楼层

抱歉,我之前的回答存在一些错误。以下是正确的代码:
  1. #include <iostream>
  2. using namespace std;
  3. int main() {
  4.     string a, b;
  5.     cin >> a >> b;
  6.     int l = a.length();
  7.     int r = b.length();
  8.     int i = 0, j = 0;
  9.     while (i < l && a[i] == '0') {
  10.         i++;
  11.     }
  12.     while (j < r && b[j] == '0') {
  13.         j++;
  14.     }
  15.     if (l - i > r - j) {
  16.         cout << ">" << endl;
  17.     } else if (l - i < r - j) {
  18.         cout << "<" << endl;
  19.     } else {
  20.         cout << "=" << endl;
  21.     }
  22.     return 0;
  23. }
复制代码

这段代码可以比较两个字符串a和b的大小,如果a大于b,则输出">";如果b大于a,则输出"<";如果a等于b,则输出"="。注意,这里的比较是基于字符串长度减去前导零后的结果进行的。希望对你有帮助!如果还有其他问题,请随时提问。

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-27 20:39:43 | 显示全部楼层    本楼为最佳答案   
本帖最后由 柿子饼同学 于 2023-11-27 20:41 编辑

你代码的问题如下 :
        第 27 行的 b[k + i] 应改成 b[k + j]
        10 - 17行最好加一个判断防止越界
        22 行的 flag 不需要 , 因为后面判断出大小之后是直接 return 0 的 , 之后就没了 , 所以判断完如果全相等就直接输出相等


下面是我修改的代码 :
  1. #include <bits/stdc++.h>
  2. using namespace std;

  3. string a, b;
  4. int l, r, i, j;

  5. int main(){
  6.     ios::sync_with_stdio(0);
  7.     cin.tie(0);
  8.    
  9.     cin >> a >> b;
  10.     l = a.size();
  11.     r = b.size();

  12.     while(i < l && a[i] == '0') i++;
  13.     while(j < r && b[j] == '0') j++;

  14.     if(l - i < r - j) cout << "<\n";
  15.     else if(l - i > r - j) cout << ">\n";
  16.     else{
  17.         for(int k = 0; k < l - i; k++){
  18.             if(a[k + i] != b[k + j]){
  19.                 if(a[k + i] < b[k + i]) cout << "<\n";
  20.                 else cout << ">\n";
  21.                 return 0;
  22.             }
  23.         }
  24.         cout << "=\n";
  25.     }
  26.    
  27.     return 0;
  28. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-27 22:24:37 | 显示全部楼层
本帖最后由 jackz007 于 2023-11-27 22:27 编辑
  1. #include <bits/stdc++.h>
  2. using namespace std                              ;
  3. int main()
  4. {
  5.     int i , j , k , l , r , flag                 ;
  6.     string a , b                                 ;
  7.     cin >> a >> b                                ;
  8.     l = a . length()                             ;
  9.     r = b . length()                             ;
  10.     for(i = 0 ; a[i] == '0' ; i ++)              ;
  11.     for(j = 0 ; b[j] == '0' ; j ++)              ;
  12.     if(l-i == r-j) {
  13.         for(flag = k = 0 ; k < l - i ; k ++) {
  14.             if(a[k + i] != b [k + j]) {
  15.                 if(a[k + i] < b[k + j]) flag = 1 ;
  16.                 else flag = 2                    ;
  17.                 break                            ;
  18.             }
  19.         }
  20.         if(flag == 0) cout<<"="<<endl            ;
  21.         else if (flag == 1) cout<<">"<<endl      ;
  22.         else cout<<"<"<<endl                     ;
  23.     }
  24. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 15:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表