(C++)读取一个输入的int型十进制数字的位数,并正序输出每个位上的值(不同数位的值用1个空格字符间隔)
1 /* 2 程序功能:读取一个输入的int型十进制数字的位数,并正序输出每个位上的值(不同数位的值用1个空格字符间隔)。 3 例如:当输入985这个数字时,显示如下信息: 4 985是一个3位数字! 5 该数字从左至右的位置上的数字依次为:9 8 5 6 作者:美人她爹,微信:fatherofBeauty 7 时间:2022年4月20日10:39:27 8 */ 9 #include <iostream> 10 #include <cmath> 11 /*自定义关键字,标记函数参数是一个输入值*/ 12 #define IN 13 using namespace std; 14 /*读取数字位数的函数*/ 15 int ReadDigitsOfNumber(IN const int number,IN const int decimalSytem); 16 /*显示数字每个位上数字的函数*/ 17 int DisplayNumberByDigits(IN const int number,IN const int digits,IN const int deciamlSystem); 18 int main() 19 { 20 int number; 21 int digits; 22 int decimalSystem = 10; 23 24 cout<<"请输入一个十进制的数字:"; 25 cin>>number; 26 /*调用函数ReadDigitsOfNumber(),并将函数返回值赋值给变量digits*/ 27 digits = ReadDigitsOfNumber(number,decimalSystem); 28 /*输出输入的十进制数字的digits*/ 29 cout<<number<<"是一个"<<digits<<"位数字!"<<endl; 30 /*调用函数DisplayNumberByDigits()*/ 31 DisplayNumberByDigits(number,digits,decimalSystem); 32 system("pause"); 33 return 0; 34 } 35 36 /* 37 ReadDigitsOfNumber()函数算法原理: 38 利用C++整型数据不保留小数位的特点, 39 对输入数据按照进制(此程序是10)做除法去截位, 40 即算术运算符/,具有截位功能。 41 举例:int number = 985; 42 number = number/10; 43 从数学角度看,number值,应该是98.5。 44 但是,因为number是整型数据,不保留小数位,此时,number = 98 45 number由最初的赋值985变为98,即实现了截位。 46 47 每截除1位,用一个初始值为零的变量digitsCount作为计数器,计数1次。 48 当最后一位截完,输入数据就变为零(作为循环终止条件) 49 此时,digitsCount保存的数据,就是输入数字的位数。 50 */ 51 int ReadDigitsOfNumber(IN const int number,IN const int decimalSystem) 52 { 53 int conditionFlag; 54 int digitsCount = 0;//将计数器初始化为零 55 int computeDigitsWorkingNumber = number; 56 57 /*do-while循环实现*/ 58 59 do 60 { 61 computeDigitsWorkingNumber = computeDigitsWorkingNumber/decimalSystem; 62 conditionFlag = computeDigitsWorkingNumber; 63 digitsCount = digitsCount + 1; 64 }while(conditionFlag != 0); 65 66 67 /*for循环实现*/ 68 /* 69 if(computeDigitsWorkingNumber == 0) 70 { 71 digitsCount = 1; 72 } 73 else 74 { 75 for(conditionFlag = computeDigitsWorkingNumber ;conditionFlag != 0;conditionFlag = conditionFlag/decimalSystem) 76 { 77 digitsCount = digitsCount + 1; 78 } 79 } 80 */ 81 82 /*用while循环实现*/ 83 /* 84 if(computeDigitsWorkingNumber == 0) 85 { 86 digitsCount = 1; 87 } 88 else 89 { 90 91 //conditionFlag = computeDigitsWorkingNumber; 92 //while(conditionFlag != 0) 93 //{ 94 // conditionFlag = conditionFlag/decimalSystem; 95 // digitsCount = digitsCount + 1; 96 //} 97 98 while(computeDigitsWorkingNumber != 0) 99 { 100 computeDigitsWorkingNumber = computeDigitsWorkingNumber/decimalSystem; 101 digitsCount = digitsCount + 1; 102 } 103 } 104 */ 105 return digitsCount; 106 } 107 /* 108 DisplayNumberByDigits()函数算法原理: 109 对于一个输入的数字,比如985,将9、8、5三个值输出。 110 用C++实现,有两种方法。 111 方法1: 112 思路:(高位捕获,依次从高位截位,迭代) 113 从十进制高位开始用整除(/)捕获数位上的值; 114 然后从高位开始进行取余(%)逐位截除; 115 如此循环迭代,直到输入数字为零,循环终止。 116 方法2: 117 思路:(低位捕获,依次从低位截位,迭代) 118 从十进制低位开始取余(%)捕获数位上的值; 119 然后从低位开始进行整除(/)逐位截除, 120 如此循环迭代,直到输入数字为零,循环终止。 121 正序输出的话,该方法需要用数组; 122 */ 123 124 /*方法1-C++实现代码*/ 125 int DisplayNumberByDigits(IN const int number,IN const int digits,IN const int decimalSystem) 126 { 127 cout<<"该数字从左至右位置上的数字依次为:"; 128 /*用for循环实现*/ 129 130 int displayWorkingNumber = number; 131 int displayWorkingDigits = digits; 132 133 for(int displayWorkingCount = 0;displayWorkingCount<digits;displayWorkingCount++) 134 { 135 cout<<displayWorkingNumber/(int)pow((float)decimalSystem,displayWorkingDigits - 1); 136 cout<<" "; 137 displayWorkingNumber = displayWorkingNumber%(int)pow((float)decimalSystem,displayWorkingDigits - 1); 138 displayWorkingDigits = displayWorkingDigits - 1; 139 } 140 141 /*用while循环实现*/ 142 /* 143 int displayWorkingNumber = number; 144 int displayWorkingDigits = digits; 145 int displayWorkingCount = 0; 146 147 while(displayWorkingCount < digits) 148 { 149 cout<<displayWorkingNumber/(int)pow((float)decimalSystem,displayWorkingDigits - 1); 150 cout<<" "; 151 displayWorkingNumber = displayWorkingNumber%(int)pow((float)decimalSystem,displayWorkingDigits - 1); 152 displayWorkingDigits = displayWorkingDigits - 1; 153 displayWorkingCount = displayWorkingCount + 1; 154 } 155 */ 156 157 /*用do-while循环实现*/ 158 /* 159 int displayWorkingNumber = number; 160 int displayWorkingDigits = digits; 161 int displayWorkingCount = 0; 162 do 163 { 164 cout<<displayWorkingNumber/(int)pow((float)decimalSystem,displayWorkingDigits - 1); 165 cout<<" "; 166 displayWorkingNumber = displayWorkingNumber%(int)pow((float)decimalSystem,displayWorkingDigits - 1); 167 displayWorkingDigits = displayWorkingDigits - 1; 168 displayWorkingCount = displayWorkingCount + 1; 169 }while (displayWorkingCount < digits); 170 */ 171 cout<<endl; 172 return 0; 173 } 174 175 176 /*方法2-C++实现代码*/ 177 /* 178 int DisplayNumberByDigits(IN const int number,IN const int digits,IN const int decimalSystem) 179 { 180 cout<<"该数字从左至右位置上的数字依次为:"; 181 182 int displayWorkingNumber = number; 183 int displayWorkingDigits = digits; 184 int digitsArray[10];//数组个数声明为10的原因:int型数据,最大值为2147483647,10位数字。 185 int displayWorkingCount; 186 187 for(displayWorkingCount = 0;displayWorkingCount < digits;displayWorkingCount++) 188 { 189 digitsArray[displayWorkingDigits -1] = displayWorkingNumber%decimalSystem; 190 displayWorkingNumber = displayWorkingNumber/decimalSystem; 191 displayWorkingDigits = displayWorkingDigits - 1; 192 } 193 for(displayWorkingCount = 0;displayWorkingCount <digits;displayWorkingCount++) 194 { 195 cout<<digitsArray[displayWorkingCount]; 196 cout<<" "; 197 } 198 cout<<endl; 199 return 0; 200 } 201 */
执行结果