C++中一道关于zzj数的题目

对于一个数字n,我们必须采取一次操作: 交换其相邻的两位。
经过交换后得到的最大的数为zzj数。
聪明的你看到这里一定知道你要做什么了:,
输入
给定一个数字n。

数据范围: 10 <= n <= 1e8

输出
输出其zzj数。

样例输入 Copy
19260817
样例输出 Copy
91260817

我有两个问题
1.怎么获取一个字符串中字符的个数
2.交换并判断后没有输出值

求帮忙解答一下可以提供一下思路和代码吗

一个取巧的方法是直接以字符串方式读取输入的数字,从字符串开头两两字符比较。
找到前面字符小于后面字符就将两个字符交换位置,并结束循环,输出字符串。
由于题目要求必须采取一次交换操作,到最后两个字符时必须交换

你题目的解答代码如下:

#include<stdio.h>
#include<string.h>

int main()
{
    int n,i;
    char s[100],t;
    scanf("%s", s);
    int len = strlen(s);
    for (i = 0; i < len-1; i++)
    {
        if(s[i] < s[i+1] || i == len-2)//到最后两个字符时必须交换
        {
            t = s[i];
            s[i] = s[i+1];
            s[i+1] = t;
            break;
        }
    }
    printf("%s",s);
    return 0;
}

如有帮助,望采纳!谢谢!

就是从整数的最高位向后两两比较,找到第一对递减的两个数字,交换这两个数字后就是结果值
整数位数可以通过循环除以10,判断余数为0则结束,循环多少次就是多少位。可以将每一位数字转换存储到整型数组,然后比较数组值进行交换后,按顺序输出整数就行了