(资料图片)
解法一: #include#include#includeint main_5() { char arr[100];//定义一个二进制字符串数组 char newArr[100];//定义一个八进制字符串数组 int ch = 0;//一个和变量 gets_s(arr);//输入二进制数据 int length = 0;//表示二进制数组的长度 int length_2 = 0;//表示八进制数组的长度 int times = 0;//将三个字符串分一组 多余的直接分一组 for (length = 0; arr[length] != ‘\0’; length++);//获得二进制数据的长度 //二进制转八进制 for (int i = length - 1; i >= 0; i–) { ch += (arr[i] - 48)(int)pow(2,times);//将字符减去48变成十进制 // 再乘二进制的对应次方 times++;//计数 if (times >= 3||i==0) {//一组超过了三个或者已经是最后一个 newArr[length_2] = ch+48;//将计算的值直接赋值进八进制数组 ch = 0;//和变量 置零 length_2++;//八进制数组的长度加一 times = 0;//计数变量清零 } } newArr[length_2] = ‘\0’;//八进制数组添加结束标记 //输出八进制数据 for (int i = length_2 - 1; i >= 0; i–) { printf("%c", newArr[i]); } printf("(8)\n"); system(“pause”); return 0; } 解法二: #include#include#includeint main() { //将二进制数据转化成十进制数据再转化成八进制 char bin[20];//存二进制数据的字符数组 char newStr[20];//存放八进制数据的字符数组 gets_s(bin);//输入数据 int sum = 0;//存放十进制数据 int length = 0;//二进制字符串的长度 for (; bin[length] != ‘\0’; length++);//获得长度 int index = 0;//次方变量 length–;//让length为最后一个字符的位置 while (length >= 0) {//待处理字符大于零时 sum += pow(2, index)(bin[length] - 48);//对二进制数据进行转化 index++;//次方数加一 length–;//待处理字符数减一 } length = 0;//用来表示八进制数据长度 while (sum) { newStr[length] = sum % 8 + 48;//求余并且转化成字符形式 length++;//八进制数据长度加一 sum /= 8;//和除8 } newStr[length] = ‘\0’;//添加字符串结束标记 for (index = length-1; index >= 0; index–) {//输出八进制数据 printf("%c", newStr[index]); } printf("(8)\n"); system(“pause”); return 0; }