一个简单的程序C#

来源:百度知道 编辑:UC知道 时间:2024/09/23 10:24:38
using System;
using System.Collections.Generic;

public class MyClass
{
public static void Main()
{
int s=0;
Console.Write("a=","n=");
int a=Convert.ToInt32(Console.ReadLine());
int n=Convert.ToInt32(Console.ReadLine());
for(int i=0;i<=n;i++)
{s+=a*n*(Math.Pow(10,n-1));}
Console.WriteLine(s);
Console.Read();
}
}
提示的错误为:无法将类型“double”隐式转换为“int”。存在一个显式转换(是否缺少强制转换?)
我刚开始学C#,希望哪个给我说下这个错误怎么解决,感激不尽...
wu

这就是一个类型转换的问题嘛,不只是C#,什么语言都存在这个问题.

把范围小的数据类型转换成范围大的,想想就知道,这是可以转换成功的,所以编译器就会帮你自动的转换,叫隐式转换.比如定义 int a=1;double b;
b=a;你不需要进行转换,b所能表示的范围比a大,所以能容纳下a.

但是把范围大的转成范围小的就不行啦,要导致精度或者数据丢失,所以编译器不会帮你转,除非你要明确要转,就是显示转换,显示转换就是你的程序明确写出某个地方要进行类型的转换.
你定义的s是int型的,而Math.Pow返回double型,因此你要写上显示转换的语句
s+=a*n*((int)Math.Pow(10,n-1)) Math.Pow前加个(int)强制转换.

{s+=a*n*(Math.Pow(10,n-1));}

修改为:

{s+=a*n*((int)Math.Pow(10,n-1));}

不过要留心数学运算溢出。

Math.Pow()返回类型是double,s定义的是int
要麼把n定义double类型,
要麼把Math.Pow()转换成int,即Convert.ToInt32

改成
double s=0.0;