网易2018招聘真题 [编程题] 相反数

我看着颗猕猴桃 2017-09-29 04:27:56


时间限制:1秒

空间限制:32768K
为了得到一个数的"相反数",我们将这个数的数字顺序颠倒,然后再加上原先的数得到"相反数"。例如,为了得到1325的"相反数",首先我们将该数的数字顺序颠倒,我们得到5231,之后再加上原先的数,我们得到5231+1325=6556.如果颠倒之后的数字有前缀零,前缀零将会被忽略。例如n = 100, 颠倒之后是1.
输入描述:

输入包括一个整数n,(1 ≤ n ≤ 10^5)



输出描述:

输出一个整数,表示n的相反数


输入例子1:

1325


输出例子1:

6556


我自己的代码如下,在网上的编译测试可以通过,但是我自己电脑上的CODEBLOCKS不管怎么编译输出都不对,输入1325应该输出6556,总是输出6555,但是输入100就能得到101,求问大神这是为什么?

#include <stdio.h>
#include<math.h>
#include <stdlib.h>
int main()
{
int n,a,y,i,n1;
int t=0;
int b[100];
i=0;y=0;
while(~scanf("%d",&n))
{
n1=n;
while(n>=10)
{
a=n%10;
b[i++]=a;
n=n/10;
}
b[i]=n;
for(;i>=0;i--)
{
y=y+b[i]*pow(10,t++);
}

printf("%d\n",y+n1);
}

return 0;
}


...全文
559 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ruodfsafsd 2017-10-08
  • 打赏
  • 举报
回复
int main() { int nuber = 100; int n= nuber; int temp = 0; while (n!=0) { temp = temp * 10 + n %10; n /= 10; } printf("%d",nuber + temp); getchar(); return 0; }
susususu2 2017-10-07
  • 打赏
  • 举报
回复
while(n>=10) 应该是 while(n>0)
wang0635 2017-09-29
  • 打赏
  • 举报
回复
可能是 pow 函数的问题。该函数的参数和返回值都是 double,所以计算 y+b[i]*pow(10,t++) 时是按 double 进行的,最后赋值给 y,可能引入截断误差。 整数运算是应避免浮点函数。
「已注销」 2017-09-29
  • 打赏
  • 举报
回复
刚少了进位
#include <stdio.h>
#include <string.h>
int main()
{
	int adr;
	char b[100] = {0};
	char* pout = b+98;
	int n;

	scanf("%s", &b);
	n = strlen(b);
	
	adr = 0;
	for (int i=0; i<n; i++)
	{
		adr = adr + b[i] + b[n-i-1] - 2*'0';
		*pout-- = (adr%10)+'0';
		adr = adr / 10;
	}
	if (adr > 0)
	{
		*pout-- = adr + '0';
	}
	printf("%s\n", pout+1);
	return 0;
}
「已注销」 2017-09-29
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <string.h>
int main()
{
	int adr;
	char b[100] = {0};
	char* pout = b+98;
	int n;

	scanf("%s", &b);
	n = strlen(b);
	
	adr = 0;
	for (int i=0; i<n; i++)
	{
		adr = adr + b[i] + b[n-i-1] - 2*'0';
		*pout-- = (adr%10)+'0';
		adr = adr / 10;
	}
	printf("%s\n", pout+1);
	return 0;
}
qq_29846883 2017-09-29
  • 打赏
  • 举报
回复

int main()
{
	int n,t,f{0};

	while (cin>>n)
	{	
		t = n;
		f = 0;

		do 
		{
			f = f * 10 + (t %10);
		} while (t = t / 10);
				
		cout << f + n << endl;
	}
	
	return 0;
}
话说大网易出题怎么会这么简单,前天看到的那个储物柜的面试题真是好多坑
自信男孩 2017-09-29
  • 打赏
  • 举报
回复
因为,100将数字顺序颠倒后得到是1,100+1就是101
qq_29846883 2017-09-29
  • 打赏
  • 举报
回复

int main()
{
	int n, a, y, i, n1;
	
	while (~scanf("%d", &n))
	{
		int t = 0;
		int b[100];
		i = 0; y = 0;
		n1 = n;
		while (n >= 10)
		{
			a = n % 10;
			b[i++] = a;
			n = n / 10;
		}
		b[i] = n;
		for (; i >= 0; i--)
		{
			y = y + b[i] * pow(10, t++);
		}

		printf("%d\n", y + n1);
	}
	return 0;
}
我这里运行没问题, 结果是对的, 唯一有点问题的就是一次循环结束后没有付初值,对后续循环有影响

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧