数A去掉一个数字后得到B,给出A与B的和N求所有可能的数A

7 篇文章 0 订阅
6 篇文章 0 订阅

废话不多说  源代码中有注释

/*
	File : ABN.c
	Date : 2015/4/4
	version : 1.0
	platform : windows 7 x86_64
	Function : 
	A + B = N
	1 <= N <= 10^9
	B 是A去掉一个数字后得到
	例如 A + B = 34
	A可以是27或31

	特例:
	12 = 11 + 1  会执行两次  11 十位个位一样,去掉十位和个位一样。
	故可以用一个数组保存结果最后输出。
*/

#include <stdio.h>

int main(int argc , char *argv[])
{
	int arr[10] = {0 , };
	int nSrc , nChg , nRes;
	int j;
	scanf("%d" , &nRes);
	if(nRes <= 10)
	{
		printf("%d\n" , nRes);
		return 0;
	}
	for(nSrc = 10; nSrc <= nRes; ++nSrc)
	{
		int nTmp = nSrc , nIndex;
		/*
			初始化数组
		*/
		for(j = 9; nTmp > 0 && j >= 0; --j)
		{
			arr[j] = nTmp % 10;
			nTmp /= 10;
		}
		/*
			保存索引
		*/
		nIndex = j + 1;
		/*
			对数组每一元素处理  8765
		*/
		for(j = 9 ; j >= nIndex; --j)
		{
			nChg = 0;
			for(nTmp = nIndex; nTmp <= 9; ++nTmp)
			{
				if(nTmp != j)
				{
					nChg = nChg * 10 + arr[nTmp];  
				}
			}
			if(nChg + nSrc == nRes)
			{
				printf("%d + %d = %d\n" , nSrc , nChg , nRes);
			}
		}
		
		/*
			还原数组值供下一次循环使用
		*/
		for(j = 0; j < 10; ++j)
		{
			arr[j] = 0;
		}
	}
	return 0;
}
运行结果

87654
78827 + 8827 = 87654
79677 + 7977 = 87654
79686 + 7968 = 87654
79687 + 7967 = 87654
79692 + 7962 = 87654
79727 + 7927 = 87654
79827 + 7827 = 87654
83827 + 3827 = 87654

34
27 + 7 = 34
31 + 3 = 34
32 + 2 = 34

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值