3 条题解

  • 1
    @ 2025-11-4 20:38:22

    #include<stdio.h>
    #include<string.h>
    int main() {
    	long long n;
    	char m[10000];
    	scanf("%lld", &n);
    	while (n--) {
    		long long b[10000] = {0};
    		scanf("%s", m);
    		long long d = strlen(m), i;
    		for (long long h = 0; h < d; h++) {
    			b[h + 1] = m[h] - '0';
    		}
    		long long t[10000] = {0};
    		for (i = d; i > 0; i--) {
    			if (b[i] >= 5) {
    				b[i - 1]++;
    				b[i] = 0;
    				t[i]++;
    			}
    		}
    		long long c = d;
    		for (long long h = 1; h <= d; h++) {
    			if (t[h] > 0) {
    				c = h;
    				break;
    			}
    		}
    		if (b[0] != 0) {
    			printf("%lld", b[0]);
    		}
    		for (long long j = 1; j <= c; j++) {
    			printf("%lld", b[j]);
    		}
    		for (long long j = c + 1; j <= d; j++) {
    			printf("0");
    		}
    		printf("\n");
    	}
    	return 0;
    }
    ---
    • 0
      @ 2025-11-6 0:15:36
      #include <bits/stdc++.h>
      using namespace std;
      int main() {
      	int t;
      	cin >> t;
      	while (t--) {
      		string s;
      		cin >> s;
      		for (int i = s.size() - 1; i >= 0; i--) {
      			if (s[i]>= '5') { 
      				int j = i - 1; 
      				while (j >= 0 && s[j] == '9') {
      					s[j] = '0';
      					j--;
      				}			
      				if (j >= 0) {
      					s[j]++; 
      				} else {
      					s = "1" + s; 
      					i++; 
      				}			
      				for (int k = i; k < s.size(); k++) {
      					s[k] = '0';
      				}
      				i = s.size() - 1; //重新遍历,寻找需要进位数字
      			}
      		}
      		cout << s << '\n';
      	}
      	return 0;
      }
      
      • 0
        @ 2025-11-3 17:09:11

        思路: 既然是四舍五入,那当然是越往左越应该入,这样才能使修改后的数更大。 我们可以把整个字符串自右向左扫,只要满足了进位条件,那就进位。并将标记放到这里。 最后输出时,只要在非标记区域,正常输出即可,否则输出 0。

        #include <bits/stdc++.h>
        using namespace std;
        int t;
        string s;
        int main()
        {
            cin >> t;
            while (t--)
            {
                cin >> s;
                s = '0' + s; // 预处理最高位
                int sswr = s.size();
                for (int i = s.size() - 1; i > 0; i--)
                {
                    if (s[i] == '9' + 1)
                    { // 满十进一
                        s[i] = '0';
                        s[i - 1]++;
                    }
                    if (s[i] >= '5')
                    { // 五入
                        sswr = i;
                        s[i - 1]++;
                    }
                }
                for (int i = 0; i < s.size(); i++)
                { // 输出
                    if (i == 0 && s[i] == '0')
                        continue;
                    if (i < sswr)
                        cout << s[i];
                    else
                        cout << '0';
                }
                puts("");
            }
            return 0;
        }
        
        • 1

        信息

        ID
        1175
        时间
        1000ms
        内存
        256MiB
        难度
        8
        标签
        (无)
        递交数
        196
        已通过
        29
        上传者