社区讨论

基于C语言内置函数的解法

P1553数字反转(升级版)参与者 3已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mkjyvwoo
此快照首次捕获于
2026/01/19 00:45
2 个月前
此快照最后确认于
2026/01/22 19:45
2 个月前
查看原帖
逛了一圈题解区发现竟然没看到C语言内置函数版的解法(是时候本蒟蒻卑微地想亮出自己的原始方法了......)

其实C语言内部有一个sscanf函数非常有用,它可以实现例如将“006”的字符数组存进一个长整型变量里面变为“6”,那么就少了循环判断删0的部分。

由于可能数字过大,不开long long听取WA声一片
CPP
#include <bits/stdc++.h>
using namespace std;

char head[101];
char tail[101];
char body[101];

void integer(char c[], int n)
{
    long long a;
    for (int i = 0; i < n; ++i)
    {
        body[n - 1 - i] = c[i];
    }
    sscanf(body, "%lld", &a);
    printf("%lld", a);
}

void fraction(char c[], int sign, int n)
{
    int a, b;
    for (int i = 0 ; i < sign; ++i)
    {
        head[sign - 1 - i] = c[i];
    }
    for (int j = sign + 1; j < n; ++j)
    {
        tail[n - 1 - j] = c[j];
    }
    if (tail[n - sign - 2] == '0')
    {
        tail[n - sign - 2] = '\0';
    }
    sscanf(head, "%d", &a);
    sscanf(tail, "%d", &b);
    printf("%d.%d", a, b);
}

void division(char c[], int sign, int n)
{
    int a, b;
    for (int i = 0 ; i < sign; ++i)
    {
        head[sign - 1 - i] = c[i];
    }
    for (int j = sign + 1; j < n; ++j)
    {
        tail[n - 1 - j] = c[j];
    }
    if (tail[n - sign - 2] == '0')
    {
        tail[n - sign - 2] = '\0';
    }
    sscanf(head, "%d", &a);
    sscanf(tail, "%d", &b);
    printf("%d/%d", a, b);
}

void percentage(char c[], int n)
{
    long long a;
    for (int i = 0; i < n - 1; ++i)
    {
        body[n - 2 - i] = c[i];
    }
    sscanf(body, "%lld", &a);
    printf("%lld%%", a);
}

int main()
{
    char c[101];
    scanf("%s", c);
    for (int i = 0; i < strlen(c); ++i)
    {
        if (c[i] == '.')
        {
            fraction( c, i, strlen(c) );
            break;
        }
        else if (c[i] == '/')
        {
            division(c, i, strlen(c));
            break;
        }
        else if (c[i] == '%')
        {
            percentage( c, strlen(c) );
            break;
        }
        else if (i == strlen(c) - 1)
        {
            integer( c, strlen(c) );
            break;
        }
    }
    
    return 0;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...