|
|
发表于 2012-12-4 00:33:15
|
显示全部楼层
- /*
- 题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。
- 例如2+22+222+2222+22222(此时共有5个数相加),
- 几个数相加有键盘控制
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- //数据结构头文件
- typedef struct MyDataType{
- int* pInts;//数祖每个元素表示一位十进制数
- int a;
- int size;
- }MyDataType;
- void Init( MyDataType* pData, int a, int n );
- void Destroy( MyDataType* pData );
- void ComputeAndPrint( MyDataType* pData );
- //------------------------------
- //便利函数和主函数
- int Input( int* pa, int* pn, const char* msg );
- int main(void){
- int a,n;
- MyDataType data;
- while( Input(&a, &n, "Input a(0<=a<=9) and n; input alpha to quit") ) {
- Init(&data,a,n);
- ComputeAndPrint(&data);
- Destroy(&data);
- }
- }
- int Input( int* pa, int* pn, const char* msg ) {
- puts(msg);
- return scanf("%d %d",pa, pn) == 2;
- }
- //---------------------------------
- //数据结构的实现
- static void Compute( MyDataType* pData );
- static void Print( const MyDataType* pData );
- void Init( MyDataType* pData, int a, int n ) {
- pData->pInts = (int*)malloc(sizeof(int)*(n+1));
- memset(pData->pInts,a,n);
- pData->a = a;
- pData->size=n;
- }
- void Destroy( MyDataType* pData ) {
- free(pData->pInts);
- }
- void ComputeAndPrint( MyDataType* pData ) {
- Compute(pData);
- Print(pData);
- }
- void Compute( MyDataType* pData ) {
- int i;
- //cin为本位进位
- int cin = 0;
- //模拟笔算加法
- for( i=0; i<pData->size; ++i ) {
- int tmp = (pData->size-i)*pData->a+cin;
- pData->pInts[i] = tmp%10;
- cin = tmp/10;
- }
- if(cin) {
- pData->pInts[i] = cin;
- ++pData->size;
- }
- }
- void Print( const MyDataType* pData ) {
- int i;
- printf("The result is:\n");
- for( i = pData->size-1; i>=0;--i ) printf("%d",pData->pInts[i]);
- printf("\n");
- }
- //----------------------------------------
复制代码 |
|