作业帮 > 综合 > 作业

C++程序 for (i=0;i=10) { a[i]=a[i]*2-10; a[i+1]+=1; }.

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/07/14 06:06:22
C++程序 for (i=0;i=10) { a[i]=a[i]*2-10; a[i+1]+=1; }.
for (i=0;i=10)
\x05\x05{
a[i]=a[i]*2-10;
\x05 a[i+1]+=1;
\x05\x05}
\x05\x05else
\x05\x05 a[i]=a[i]*2;
cout
你先说说你想实现什么?
还有你数组a的空间是多少?你这么访问a[i+1]可能会越界哦.
再问: 用数组求2的1000次方
再答: 2的1000次方???2的10次方吧?for(int i=0; i<10;++i)
{
if(i==0) 
a[i] = 2;
else 
a[i] = a[i-1] * 2;
}求2的10次方,为什么要*2 + 1呢?
再问: 普通方法溢出,所以用数组方法求,2的10次方会啊,就是因为数字大了。所以想用数组
再答: 我大概明白你的意思, 你是要把计算出来的十进制的结果放到数组里面是吧, 我按照你的想法写了个程序, 也大概测了一下, 代码和结果都如下:#include "iostream"
using namespace std;
int main()
{
 int iMax = 0;
 while(cin >> iMax)
 {
  if(iMax == 0) return 0;
  unsigned short cnum[1000] = {};  //初始化
  unsigned int iMaxByteCount = 1;  //结果占位数
  cnum[0] = 1;
  for(int i = 1; i != iMax + 1; ++i)
  {
   int iCarry = 0; //进位初始化
   for(int j = 0; j != iMaxByteCount; ++j)
   {
    int iTmp_upper = cnum[j+1]; //当前位 的高位
    int iLastCarry = iCarry;    //当前位 的低位 的进位
    iCarry = cnum[j] * 2 / 10;  //当前位 给高位 的进位
    cnum[j] = cnum[j] * 2 % 10 + iLastCarry;  //计算当前位应得的值
    if( j == iMaxByteCount-1 && iTmp_upper == 0 && iCarry != 0 ) 
     ++iMaxByteCount;    //结果占位数增加
   }
  }
  for(int g = iMaxByteCount; g != 0; --g)   //输出10进制的结果
  {
    cout<<cnum[g-1];
  }
  cout<<endl;
 }
}测试结果: 看下面附件(奇数行是输入,表示要得到2的多少次方的结果....接着的行就是结果)