首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >[牛客新手入门130] 55,57题解

[牛客新手入门130] 55,57题解

作者头像
爱吃大芒果
发布2025-12-24 14:07:58
发布2025-12-24 14:07:58
1160
举报

 [牛客新手入门130] 55,57题解

noob55 添加逗号

给定一个正整数 N(1

\leq
\leq

N

\leq
\leq

2

\times
\times
10^{9}
10^{9}

)。 现在需要将其转换为千分位格式,即从整数最低位开始,每三位数字插入一个英文逗号,以提高可读性。 例如,对于 980364535980364535,转换后为 980,364,535980,364,535。 请编写程序完成该格式转换。

输入描述: 在一行中输入一个整数 N(1

\leq
\leq

N

\leq
\leq

2

\times
\times
10^{9}
10^{9}

)。

输出描述: 输出一个字符串,表示将 NN 转换为千分位格式后的结果。 请不要输出多余的空格或换行。

思路

将整数 N 转成字符串处理。

从字符串的末尾开始往前遍历,每 3 个字符插入一个逗号 ,

注意不要在最前面加逗号。


代码实现

代码语言:javascript
复制
string s = to_string(N);
    int len = s.length();
    string result;
  • to_string(N) 将整数 N 转换成字符串
  • 获取字符串 s 的长度(字符个数)
  • 创建一个空的字符串 result,用来存储最终格式化后的结果

逻辑:程序会从 s 的末尾开始遍历,每3个数字就在 result 中插入一个逗号,最后得到千分位格式的字符串。

代码语言:javascript
复制
 int count = 0;
    for (int i = len - 1; i >= 0; i--) {
        result.push_back(s[i]);
        count++;
        if (count % 3 == 0 && i != 0) {
            result.push_back(',');
        }
    }
  • 将原字符串从右往左的字符添加到结果
  • 计数器加1
  • 每3位且不是最前面
  • 添加逗号

执行过程示例

输入: s = "980364535"len = 9

循环

i

s[i]

result变化

count

条件判断

动作

1

8

'5'

"5"

1

1%3≠0

-

2

7

'3'

"53"

2

2%3≠0

-

3

6

'5'

"535"

3

3%3=0且i≠0

加逗号 → "535,"

4

5

'4'

"535,4"

4

4%3≠0

-

5

4

'6'

"535,46"

5

5%3≠0

-

6

3

'3'

"535,463"

6

6%3=0且i≠0

加逗号 → "535,463,"

7

2

'0'

"535,463,0"

7

7%3≠0

-

8

1

'8'

"535,463,08"

8

8%3≠0

-

9

0

'9'

"535,463,089"

9

9%3=0但i=0

不加逗号

代码语言:javascript
复制
reverse (result.begin(), result.end());
    cout << result << endl;

将字符串完全反转

得到最终结果


完整代码实现

代码语言:javascript
复制
#include <bits/stdc++.h>
using namespace std;
int main() {
    int n;
    cin >> n;

    string s = to_string(n);
    int len = s.length();
    string result;

    int count = 0;
    for (int i = len - 1; i >= 0; i--) {
        result.push_back(s[i]);
        count++;
        if (count % 3 == 0 && i != 0) {
            result.push_back(',');
        }
    }
    reverse (result.begin(), result.end());
    cout << result << endl;
    return 0;
}

noob57 凯撒加密

旺仔哥哥经常在牛客上刷题,但有一天他突然忘记了登录密码(他没有绑定邮箱或手机)。 他记得密码是通过对原文字符串 s 中的每个小写英文字母向后错位 nn 次得到的。字母 z 向后错位一次会变为 a,以此类推循环。 现给出原文字符串 s 和错位次数 n,请帮助旺仔哥哥计算出最终密码。

输入描述:

第一行输入一个整数 n (1≦n≦100),表示错位次数。 第二行输入一个由小写英文字母组成的字符串 s(1≦∣s∣≦103)(1≦∣s∣≦103),表示原文字符串。

输出描述:

输出一个字符串,表示对 ss 中每个字符向后错位 nn 次后得到的密码字符串。


思路

  1. 对于字符串中的每个小写字母,将其向后移动 n 位。
  2. 如果移动后超出 'z',则循环回到 'a' 继续。
  3. 因为 n 最大是 100,我们可以直接对 26 取模来减少不必要的循环。

公式

对于字符 c,移位后的字符为:

new_char=(c−′a′+n)mod  26+′a′new_char=(c−′a′+n)mod26+′a′

关键点

  • 使用 n % 26 避免无效的大循环。
  • 公式 (c - 'a' + n) % 26 + 'a' 可以保证结果在 'a' 到 'z' 之间。
  • 直接修改原字符串,节省空间。

完整代码实现

代码语言:javascript
复制
 #include <bits/stdc++.h>
 using namespace std;
 int main(){
    int n;
    cin>>n;
    string s;
    cin>>s;
    
    n = n % 26;
    for(char &c : s){
        if(c>='a' && c<='z'){
            c=(c - 'a'+n)%26+'a';
        }
    }
    cout<< s <<endl;
    return 0;

 }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-12-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  •  [牛客新手入门130] 55,57题解
    • noob55 添加逗号
      • 思路
    • 代码实现
    • 执行过程示例
  • 完整代码实现
    • noob57 凯撒加密
      • 输入描述:
      • 输出描述:
    • 思路
    • 公式
    • 关键点
  • 完整代码实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档