双色球专业媒体擂台赛:急求C语言程序

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/29 11:25:57
小弟刚学C语言,水平有限,有道作业还请大家帮忙作一下:
假定用一整型数组表示一个长整数,数组的每个元素存储长整数的一位数字,则实际的长整数m表示为:
m=a[k]*10的(k-1)次方+a[k-1]*10的(k-2)次方+.....+a[2]*10+a[1]
其中a[0]保存该长整数的位数.求:把该10进制长整数转换为16进制数输出
并写出流程图(不是N-S型)
(由于我们没学到指针和结构体,所以程序中只能用函数还有循环了)

include "iostream.h"
include "cmath.h"
void textout(){

int m=0;

for(int i=0; i<a[0]; i++)
m=m+a[i+1]*(int)pow(10.0,(double)i)

cout<<hex<<m<<endl;
}

不知道除了pow还有什么幂指数 -_-!

十进制转换成十六进制的方法:
用所需转换的十进制数字除以十六,余数作为十六进制的个位数,商数再除以十六,余数作为十六进制的十位数,照此下去,一直到不能整除。

因此,此题可以先实现数组表示的长整数的除法函数,再按照上面的方法一位一位的算。

本人水平有限,只能想到这么多了。

我来写个实现~~
#include<stdio.h>

int mod(int * a, int k){
int b = 0;
for(int i = 0; i < k; i++){
b = b * 10 + a[i];
a[i] = b >> 4;//即 a[i] = b / 16
b = b & 15;//即 b = b % 16
}
return b;
}

void change(int *a, int k){
for(int i = 0; i < k; i++){
a[i] = mod(a+i , k-i);
}
for(int i = k - 1; i >= 0; i--){
if(a[i] < 10){
if(i < k - 1 && a[i] > 0)
printf("%d",a[i]);
}
else{
printf("%c",a[i]+'A'-10);
}
}
}

int main(){
int aa[6] = {1,2,3,4,7,1};
change(aa,6);
}