数论-整数对
整数对
考虑一个不含前导零的正整数X,把它去掉一个数字以后得到另一个数Y。输入X+Y的值N(1<=N<=10^9),输出所有可能的等式X+Y=N。例如N=34有两个解:31+3=34;27+7=34。
思路:
1.记N的10进制表示形式的长度为L.
2.设从x右边数的第i(0<=i
3.记X=a10(i+1)+d10i+b,(b<10i),则Y=a10i+b,且X+Y=N;由此可得11a10i+d10^i+2b=N;
4.遍历所有的i和d;
5.固定i和d之后,求不定方程11a10i+2b=N-d10i,所有满足0i且0<=b<10^i(注意当i=L-1时,a恒等于0)整数解(a,b)并带入3中解出X,Y即可。
#include
#include
#include
using namespace std;
int main()
{int N;cin>>N;int L=0,tem=N;while (tem){L++;tem/=10;}for (int i=0;i<L;i++ ){for (int d=0;d<10;d++ ){for (int b=0;b<pow(10,i);b++ ){if((int)(N-d*pow(10,i)-2*b)%(11*(int)pow(10,i))==0){int a=(N-d*(int)pow(10,i)-2*b)/(11*pow(10,i));if(i==L-1){a=0;cout<<"X:"<<a*pow(10,i+1)+d*pow(10,i)+b<<"Y:"<<a*pow(10,i)+b<<"\n";}else{if(a>0){cout<<"X:"<<a*pow(10,i+1)+d*pow(10,i)+b<<"Y:"<<a*pow(10,i)+b<<"\n";}}}}}}return 0;
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
