为甚么鄙人的找规律行不通?(第一个测试点错了,90分)
查看原帖
为甚么鄙人的找规律行不通?(第一个测试点错了,90分)
576448
aulive楼主2022/7/10 09:47
#include<bits/stdc++.h>
using namespace std;
unsigned long long gs(string a) {
	unsigned long long k=a.size(),z=0;
	for(int i=0; i<k; i++) {
		if(a[i]=='9') {
			z++;
		} else {
			break;
		}
	}
	return z;
}
unsigned long long gs0(string a) {
	unsigned long long k=a.size(),z=0;
	for(int i=1; i<k; i++) {
		if(a[i]=='0') {
			z++;
		} else {
			break;
		}
	}
	return z;
}
unsigned long long gs10(int o,string a) {
	unsigned long long k=a.size(),z=0;
	for(int i=o; i<k; i++) {
		if(a[i]=='0') {
			z=1;
		} else {
			return 0;
		}
	}
	return z;
}
int main() {
	unsigned long long n;
	string a;
	cin>>n;
	for(unsigned long long i=1; i<=n; i++) {
		int p=1;
		cin>>a;
		int k=a.size();
		if(k==1) {
			cout<<a;
		} else if(a[0]!='9') {
			if(gs0(a)==k-1) {
				p=1;
			}else{
				p=0;
			}
			printf("1");
			for(unsigned long long i=2; i<=k; i++) {
				if(i!=k)
					printf("0");
				else {
					if(p==0)
					cout<<a[0];
					else{
						cout<<a[0]-'1';
					}
				}
			}
		} else {
			int r=gs(a);
			if(r==k) {
				printf("1");
				for(unsigned long long i=1; i<=k; i++) {
					printf("0");
				}
			} else {
				if(r==k-1&&a[k-1]=='8') {
					cout<<a;
				} else {
					long long y=k-r-1;
					if(1+r==k) {
					} else
						printf("1");
					for(long long i=1; i<y; i++) {
						printf("0");
					}
					if(gs10(r+1,a)==0)
					printf("%c",a[r]+1);
					else
					printf("%c",a[r]);
					for(unsigned long long i=1; i<r; i++) {
						printf("9");
					}
					printf("8");
				}
			}
		}
		printf("\n");
	}
	return 0;
}
2022/7/10 09:47
加载中...