关于算法的有关问题

请教高手关于算法的问题
1、有0.1,0.5,1,5,10,20,50,100共8个数字 现在需要组合成100问共有多少种组合方式?打印出这些组合
2、设计一个算法,实现将数字通过26进制转化为字符(如:0-A,1-B,26-AA,27-AB,28-AC,52-BA,78-CA)

------解决方案--------------------
第一个问好像是
1毛,5毛,一块,五块,十块,二十块,五十块,一百块哦。和速算24算法相似
------解决方案--------------------
第二个:可以定义一个26维的数组letter[26]。letter[1] = 'A',letter[2] = 'B‘.....
然后就是平常转二进制的方法。输出改成letter[i]就行了···
------解决方案--------------------
2应该用栈来解决
------解决方案--------------------
第一题可以用穷举···每个数的限制条件就是100除以每一个数所得的最大个数···
不过效率有点低···
等大牛···
------解决方案--------------------
第二题:
C/C++ code

#include <iostream>
using namespace std;
int main()
{
    int num;
    char str[256] = {'A'};//如果输入0的话,循环不执行,那么输出就要特殊处理了
    int index = 0;
    cin>>num;
    while(num)
    {
        str[index++] = num%26 + 65;
        num /=26;
    }
    cout<<num<<"的26进制表示:";
    if (index == 0)
    {
        index++;
    }
    for (int i = index--; i >= 0; i--)
    {
        cout<<str[i];
    }
    cout<<endl;

    return 0;
}

------解决方案--------------------
A是0 26怎么会是AA呢 是BA 
代码如下
C/C++ code
int main()
{
    
    int val;
    while(cin >> val)
    {
        int top = -1;
        char stack[100] = {0};
        if(val == 0)
           stack[++top] = 'A';
        while(val)
        {
            stack[++top] = val % 26 + 'A';
            val = val / 26;
        }
        while(top >= 0)
           cout << stack[top--];
        cout << endl;
    }
    
    return 0;
}