Số nguồn Tên file: SONGUON.cpp Xét một số N nguyên dương, Ví dụ: N = 836, xét tổng M = 836 + 8 + 3 +6 = 853, khi đó ta gọi số N = 836 là số nguồn của số M = 853. Có những số có thể có nhiều nguồn, ví dụ số: M = 909 có hai số nguồn là 891 và 900. Cho trước số M (M ≤ 2*109 ). Nhiệm vụ của bạn là tìm số nguồn của M, nếu như M có nhiều nguồn thì đưa ra kết quả là số nguồn nhỏ nhất. Dữ liệu vào: Số nguyên dương M Dữ liệu ra: Số nguồn nhỏ nhất của số M, trường hợp không tìm được số nguồn của M thì đưa ra -1.
dạ c++ ạ
#include <bits/stdc++.h>
#define nmax 1000005
#define ll long long
using namespace std;
int tong_chu_so(long long k)
{
int tong=0;
while (k>0)
{
tong+=k%10;
k/=10;
}
return tong;
}
int main()
{
ios_base::sync_with_stdio(false),
cin.tie(0), cout.tie(0);
long long n,ans=-1;
cin>>n;
for (int i=1 ; i<=9*9 ; i++){
if (i == tong_chu_so(n-i)) ans=n-i;
}
cout<<ans;
}
m=int(input("Nhap M: "))
if(m>2*10**9):exit()
ans=m
for n in range(m,m-9*len(str(m))-1,-1):
t=sum(map(int,str(n)))
if(n+t==m):ans=min(ans,n)
if(n<=0): break;
if(ans!=m): print(ans)
else: print(-1)