QY19. 最后一位
描述
牛牛选择了一个正整数X,然后把它写在黑板上。然后每一天他会擦掉当前数字的最后一位,直到他擦掉所有数位。 在整个过程中,牛牛会把所有在黑板上出现过的数字记录下来,然后求出他们的总和sum.输入描述
输入包括正整数sum(1 ≤ sum ≤ 10^18)输出描述
输出一个正整数,即满足条件的X,如果没有这样的X,输出-1。示例1
输入:
564
输出:
509
C 解法, 执行用时: 1ms, 内存消耗: 464KB, 提交时间: 2019-03-19
#include<stdio.h> long long binSearch(long long n); long long decompose(long long n); int main() { long long n,a; scanf("%lld", &n); a = binSearch(n); printf("%lld\n", a); return 0; } long long binSearch(long long n) { long long high=n,low=n-2*(n/10),mid,mid1; while (low <= high) { mid = (low + high) / 2; mid1 = decompose(mid); if (n < mid1) high = mid - 1; else if (n > mid1) low = mid + 1; else return mid; } return -1; } long long decompose(long long n) { long long sum = 0; while (n != 0) { sum = sum + n; n = n / 10; } return sum; }
C 解法, 执行用时: 2ms, 内存消耗: 236KB, 提交时间: 2019-04-29
#include<stdio.h> long he(long i) { long sum=0,w=1; while(i) { sum=sum+i; i=i/10; } return sum; } long zhao( long x) { long high=x,low=x-2*(x/10),mid,mid1; while(low<=high) { mid=(high+low)/2; mid1=he(mid); if(mid1<x) low=mid+1; else if(mid1>x) high=mid-1; else { return mid; } } return -1; } int main() { long x,w=0,t; scanf("%ld",&x); w=zhao(x); printf("%ld",w); }