有没有办法判断一个数是不是【10的倍数】

随心录123 2012-03-23 09:29:59
比如 知道一个数 是 9 或者 13 或者 123 或者 1234
是否可以 将他 变成 10 20 130 1240
...全文
2271 55 打赏 收藏 转发到动态 举报
写回复
用AI写文章
55 条回复
切换为时间正序
请发表友善的回复…
发表回复
fanxin_1999 2012-03-26
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 yankai159357 的回复:]
引用 3 楼 net5354 的回复:
除10有结果的就是了

是我没有表达清楚 还是您没有理解。

相当于 四舍五入
[/Quote]

感觉是你的表达有问题。
YapingXin 2012-03-26
  • 打赏
  • 举报
回复
[Quote=引用 48 楼 joywen520 的回复:]

眼睛出糗了 算法最佳+9再/10哈哈
山外有山啊 年轻人
[/Quote]

是的,我在39楼已经知错了。
startstartsvip 2012-03-26
  • 打赏
  • 举报
回复
默默积极 到了三十五才发现,


float 不是有个 +0.5 进位的
chen_ya_ping 2012-03-26
  • 打赏
  • 举报
回复
要是有了规则,就好办了。楼主,主要是你想要做什么呢?
YapingXin 2012-03-23
  • 打赏
  • 举报
回复
呃... 我囧了...
mngzilin 2012-03-23
  • 打赏
  • 举报
回复
[Quote=引用 35 楼 wanghui0380 的回复:]

额,我在想你们干嘛都+10呢?

既然要进位,直接+9 在除 10 不就结了
[/Quote]

35#好办法!!
mngzilin 2012-03-23
  • 打赏
  • 举报
回复
[Quote=引用 35 楼 wanghui0380 的回复:]

额,我在想你们干嘛都+10呢?

既然要进位,直接+9 在除 10 不就结了
[/Quote]

(130+9)/10*10=130
mngzilin 2012-03-23
  • 打赏
  • 举报
回复
效率ok了,下面测试这个1000000000次运算:

第一种:8573ms
第二种:9576ms

        static void Main(string[] args)
{
int a;
int c;
Stopwatch sw = new Stopwatch();
sw.Start();
for (int i = 0; i < 1000000000; i++)
{
a = 1234;
c=a % 10;
if(c==0)
c=10-c;
a = a + c;
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);

int b;
sw.Reset();
sw.Start();

for (int i = 0; i < 1000000000; i++)
{
a = 1234;
b = a / 10 * 10;
if (b < a)
{
b += 10;
}
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);

Console.Read();
}

wanghui0380 2012-03-23
  • 打赏
  • 举报
回复
额,我在想你们干嘛都+10呢?

既然要进位,直接+9 在除 10 不就结了
mngzilin 2012-03-23
  • 打赏
  • 举报
回复
至于取余效率是否更低,这个测试可以说明一些问题,
第一种4694ms,第二种4697ms
第一种4742ms,第二种4717ms
第一种4696ms,第二种4701ms

三次分别进行1000000000次运算,时间差别很小

        static void Main(string[] args)
{
int a;
Stopwatch sw = new Stopwatch();
sw.Start();
for (int i = 0; i < 1000000000; i++)
{
a = 1234;
a = a % 10;
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);

int b;
sw.Reset();
sw.Start();

for (int i = 0; i < 1000000000; i++)
{
a = 1234;
a = a / 10;
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);

Console.Read();
}
mngzilin 2012-03-23
  • 打赏
  • 举报
回复
int a = num + 10 - num % 10;
这种运算只进行一次取余,一次加法,一次减法
----------------------------------------------------------------------------

int result = input / 10 * 10;
if(result < input)
{
result += 10;
}
这种进行一次乘法,一次除法,一次加法,一次if判断
-----------------------------------------------------------------------------

取余和除法运算时间基本相当,第二种多了乘法运算,这个要比加减法元运算时间多,if也耗时很多
mngzilin 2012-03-23
  • 打赏
  • 举报
回复
上面那个XinYaping少年别叫了,帮你测试一下效率吧,前一种516ms,后一种968ms

        static void Main(string[] args)
{
int a;
Stopwatch sw = new Stopwatch();
sw.Start();
for (int i = 0; i < 100000000; i++)
{
a = 1234;
a = a + 10 - a % 10;
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);

sw.Reset();
sw.Start();

StringBuilder sb = new StringBuilder();
int b;
for (int i = 0; i < 100000000; i++)
{
a = 1234;
b = a / 10 * 10;
if (b < a)
{
b += 10;
}
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);

Console.Read();
}
随心录123 2012-03-23
  • 打赏
  • 举报
回复
看来 这个问题 讨论得还蛮激烈。。。
YapingXin 2012-03-23
  • 打赏
  • 举报
回复

对。

不过假如不是以10为基数,是以2的次方为基数,那我就直接位运算,这下就有意思了。:-)
porschev 2012-03-23
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 xinyaping 的回复:]

对。
[/Quote]

哈哈,我估计千万次以内的运算,用你的乘除法和取模的方法差别应该都很细微。。。
YapingXin 2012-03-23
  • 打赏
  • 举报
回复
对。
porschev 2012-03-23
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 xinyaping 的回复:]

引用 23 楼 porschev 的回复:
C# code

//大于0的可以这么判断。。。如果有其它要求,请自己加判断
int i = 0;

if (i % 10 != 0)
{
Console.WriteLine(i + (10 - i % 10));
}



这个算法效率差。
[/Quote]

不否认。。。如果不是大量的用。。。取模也是可行的。。。。

YapingXin 2012-03-23
  • 打赏
  • 举报
回复
别想了,我的函数是最优解。我打赌你找不到更好的实现方法。
YapingXin 2012-03-23
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 porschev 的回复:]
C# code

//大于0的可以这么判断。。。如果有其它要求,请自己加判断
int i = 0;

if (i % 10 != 0)
{
Console.WriteLine(i + (10 - i % 10));
}
[/Quote]


这个算法效率差。
YapingXin 2012-03-23
  • 打赏
  • 举报
回复
作为一名编程老鸟,这点常识应该还是有的。:-)
加载更多回复(34)

62,268

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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