0

小 Z 先生正在看一张纸,但没有成功地找到纸上所写数字的平方根。

帮助小Z先生找到BIG数字A的平方根。数字A最多有1000位,A的平方根永远是整数。

INPUT:标准输入的第一行包含数字0

输出:向标准输出写入数字 M,其中 M 表示数字 B 的长度(其中 B 是数字 A 的平方根),在接下来的 M 行中写入数字 B 的数字(从最高有效位开始)到最不重要的)。

输入:3 6 2 5

输出:2 2 5

解释:纸上写的数字是 625,它的平方根是 25。

我的代码:

#include <iostream> 
#include <cmath> 

using namespace std; 

int main() 
{ 
    int n,m,k,i; 
    int niza[1001]; 

    cin>>m; 
    for(int i=0;i<m;i++) 
    cin>>niza[i]; 

    niza[i]=k; 
    cout<<sqrt(k); 

    return 0; 
} 
4

2 回答 2

3

这很可能是因为您从未设置k,并且它在程序开始时包含的随机值是负数,因此sqrt(k)崩溃。此外,如果m输入大于1000,您将超出数组范围。

于 2013-03-31T16:03:23.973 回答
1

您的程序将在以下位置崩溃:niza[i] = k因为i超出了数组的末尾。

k未初始化。您正在输出未初始化变量的平方根。

就像@Vilx-说的那样,您必须m在循环之前检查值。

此外,该sqrt函数不适用于数字数组,因此您必须想出一种不同的方法来根据数字计算平方根。

您将需要检查cinaftercin >> m和的状态cin >> niza[i]。用户可以并且将输入任何内容,例如字母,这在预期数字时会导致失败。

此外,请尝试在运算符和函数名称之间放置空格。它们不会增加可执行文件的大小或速度,但使阅读和维护更容易。

于 2013-03-31T16:55:43.527 回答