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;
    }
    ---
    • 1
      @ 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;
      }
      
      • 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;
        }
        
        • 1

        信息

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